2016-07-26 36 views
3

我是Golang的新手。據我所知,當你想創建一個新的Go項目時,我們只需要創建一個目錄。然後我們將環境變量GOPATH指向此目錄。在這個目錄中,我們創建了三個子目錄pkg,srcbin。然後當我們執行go get ...時,第三方包將安裝在pkg子目錄中。後來如果我想創建另一個Go項目,則創建一個名爲project2的新目錄並將GOPATH指向project2。此時go get ...將下載項目2的pkg子目錄中的第三方包。我的問題是,Go是否有中央存儲庫?如果沒有,如果在兩個不同的項目中使用相同的軟件包,則會下載兩次。真的嗎?golang是否有下載的第三方軟件包的中央存儲庫?

+0

通過「中央資源庫」,你的意思是一個本地緩存?這是您的GOPATH,您可以爲多個項目使用相同的GOPATH。 – JimB

+0

如果我在project1上工作,我將GOPATH指向project1。後來我在project2上工作,我應該把GOPATH指向project2嗎?如果是這樣,GOPATH不是本地緩存...... – user130268

+3

GOPATH不是您的項目的根源。您的項目應位於'$ GOPATH/src'下的導入路徑中。請參閱[如何編寫Go代碼](https://golang.org/doc/code.html) – JimB

回答

1

以後如果我想創建另一個圍棋項目,我創建了一個名爲項目2和點GOPATH新的目錄,以PROJECT2 ... 我的問題是,圍棋是否有一箇中央存儲庫?如果沒有,如果在兩個不同的項目中使用相同的軟件包,則會下載兩次。真的嗎?

不,沒有Go代碼的中央存儲庫。但是,軟件包總是會被下載兩次也是不正確的。

這裏的誤解是,GOPATH指向一個單獨的項目:它沒有。相反,GOPATH指向一個環境您的所有軟件包都在哪裏生存;它是go get將下載包的地方,並且go build將在構建時查找包。

而是改變GOPATH每一個項目,你應該設置GOPATH一次,並把所有的項目在$GOPATH/src/(您的項目不包含src/目錄,他們去src/目錄)。

因此,例如,整個樹看起來像:

$GOPATH/src/bitbucket.org/ (or GitHub, or your website, or whatever) 
├── YourProject 
└── AnotherProject 
相關問題