2016-03-15 114 views
14

我我GOPATH設置爲我可以擁有多個GOPATH目錄嗎?

/Users/me/dev/go 

,我有

/Users/me/dev/go/src/client1 
/Users/me/dev/go/src/client2 
/Users/me/dev/go/src/client3 

/Users/me/dev/client1/rails_project 
/Users/me/dev/client2/php_project 
etc. 

我不喜歡怎樣我的根文件夾dev的我被迫有這個一般的「去」目錄,持有許多不同的客戶去項目。

+0

是的。單獨的條目:或;取決於操作系統。 – Volker

回答

21

是,GOPATH是目錄(如PATH)的列表。有關詳細信息,請運行go help gopath。例如,在Linux上,我有:

$ go env 
GOROOT="/home/peter/go" 
GOPATH="/home/peter/gopath:/home/peter/public/gopath" 
$ 

我在Windows上有類似的東西。

注意:Linux使用:作爲GOPATH列表分隔符; Windows使用;作爲分隔符。

如果您使用go get它將默認爲列表中的第一個目錄。

運行go env檢查是否一切正確。

+7

不幸的是,這仍然導致各種悲傷,因爲工具似乎不能很好地處理多個GOPATH。例如,供應商目錄只能在路徑中的第一個項目中找到; 'go get'只能用於路徑中的第一項;大多數(全部)供應商管理工具不希望路徑中有多個項目;不同的工作路徑被認爲是在不同的「樹」中。而且,不止一個位置(已售賣)的包裹會變得有點棘手。我仍然試圖弄清楚所有這些,但還沒有找到一個好的解決方案。 – payneio

6

是的。

舉圍棋本身:

$ go help gopath 

轉到路徑來解決import語句。 它由go/build軟件包實施並記錄在案。

GOPATH環境變量列出了要查找Go代碼的位置。
在Unix上,該值是冒號分隔的字符串。
在Windows上,該值是以分號分隔的字符串。
在計劃9上,該值是一個列表。

必須設置GOPATH才能在 標準Go樹之外獲取,構建和安裝軟件包。

在GOPATH列出的每個目錄必須具有規定的結構:

src目錄包含的源代碼。 src 下面的路徑決定了導入路徑或可執行文件的名稱。

...

1

This blog post提供了有關如何以及爲什麼人們會在GOPATH設置多個值,特別是當它說一個非常好的解釋:

我GOPATH由3個文件夾或GOPATH工作區。

第一個是我的着陸工作區。由於它是第一個列出的,每當我去找到任何新的軟件包時,它總是在這個工作區中結束。

Go搜索GOPATH中列出的每個目錄以查找源代碼,但新包總是下載到列表中的第一個目錄中。 我規定永遠不要在那裏做任何開發,所以當文件夾變得太大時(使用Go包的時候我不使用它),清理這個文件夾總是非常安全的。畢竟,它只有Go包,我可以再次得到。

我的第二個工作區是爲所有我個人的Go包和我可能想要「最喜歡」或做一些開發的任何其他包。我把我經常使用的東西從第一個工作區移動到第二個。

我的第三個工作區致力於我工作中的私人Go包及其依賴關係。將我的工作包與我的所有個人資料分開是很方便的,所以他們不會彼此相處。

相關問題