的回答你的問題:
I don't know what is the proper way to define the import path for local packages.
正如@JimB說:
If you want to use the Go tools you need to follow the conventions. If you want go get to work, then you need to import it with the full name, otherwise put it wherever you want in GOPATH
所以,你需要,如果你想go get
工作使用完整的進口路徑github.com/levin/foo
,你應該做的如果你希望其他人使用你的軟件包,這種方式。
回答你的第二個問題:
Wouldn't it cause much rework if I move my codes to Bitbucket or I host my own git server in AWS?
還有就是使用自定義域名作爲導入路徑,仍然無論你想託管代碼的方式,它被稱爲虛榮導入路徑我想。您只需將一些元標記添加到您使用的導入文件中獲取服務器的html文件即可。
This文章解釋瞭如何做到這一點,但總而言之,在訪問自定義導入路徑時在自定義域中獲取的文件中,您需要添加一個指向您託管代碼的位置的go-import
元標記。本文使用github.com/foo/bar
作爲您託管您的代碼的示例,並使用foo.com/bar
作爲您真正的導入路徑。
所以在文件訪問foo.com/bar
時被服務應該有這樣的meta標籤:
<meta name="go-import" content="golang.org/x/tools git http://github.com/foo/bar">
你繼續託管代碼在github上。然後,如果將主機位更改爲代碼,則只需更改元標記的值,但所有使用該程序包的代碼仍然使用完全相同的導入路徑"foo.com/bar
。
唯一的問題是,現在您的項目可以通過2個不同的路徑導入:foo.com/bar
和github.com/foo/bar
。爲了解決這個問題,他們有canonical imports只允許包使用自定義路徑,而不是GitHub的一個進口,它只是添加註釋旁邊的包名稱每個軟件包文件:
package bar // import "foo.com/bar"
這是唯一的避免你遇到的問題。如果您正在使用只在本地使用的軟件包,則可以使用@srxf答案,只要知道該工具不會與該代碼一起工作(如go get
)。如果您希望代碼按照預期工作,那麼這就是要走的路。
作爲一個評論,我知道這感覺傻進口github.com/levin/foo
爲本地包,但如果你使用的是包在另一個包(比如foo2
)和別人進口foo2
,這允許編譯器知道到底從哪裏得到的依賴關係爲foo2
,因爲代碼中的所有導入都包含整個路由,而不是本地文件的名稱。通過這種方式,人們可以隨時獲得所需的軟件包依賴關係,而無需將這些文件包含在您的軟件倉庫中,也無需配置任何軟件即可運行。這不是完美的,但它是行之有效的方式,他們稱之爲約定優於配置或類似的東西。
如果你想使用Go工具,你需要遵循約定。如果你想'去'工作,那麼你需要導入它的全名,否則把它放在任何你想要的GOPATH。 – JimB