2013-02-20 78 views
1

我在Go中創建了一個API,其中我已經通過「go get」安裝了兩個包,並創建了四個供我自己使用的包。一切似乎都很好。不過,我想移動包的位置,以便我可以擁有我的Git目錄中的所有內容。在非默認目錄中安裝Go包

從我讀過的內容來看,它應該像將GOPATH變量更改爲新目錄一樣簡單,然後再次運行「go get」來測試。它是否正確?如果是這樣,我是否做錯了什麼?以下是我在運行「go env」時在終端(Mac OS X)中顯示的內容。如果有其他信息會有用,請告訴我。謝謝。

GOARCH="amd64" 
GOBIN="" 
GOCHAR="6" 
GOEXE="" 
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common" 
GOHOSTARCH="amd64" 
GOHOSTOS="darwin" 
GOOS="darwin" 
GOPATH="/Applications/MAMP/htdocs/git/cbi/api" 
GOROOT="/usr/local/go" 
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" 
CGO_ENABLED="1" 

我要澄清,在默認情況我GOPATH是一個空字符串。我試着將它更新到上面的目錄中,因爲那是我希望安裝新軟件包的地方,也是爲了查找我創建的放置在那裏的任何軟件包。

我設置我的GOPATH變量通過運行: 出口GOPATH = 「/應用程序/ MAMP/htdocs中/的git/CBI/API」

這樣做後,我可以看到變量已經被設置時,我鍵入「go env」。但是,如果我退出終端然後再打開它,並再次運行「go env」,則GOPATH變量未設置。它有沒有保存的原因?我應該設置另一種方式,而不是出口?

+0

當您嘗試從新位置創建/運行時會發生什麼? – 2013-02-20 21:24:23

+0

你還沒有提供足夠的信息。當您使用不同的gopath時,您是否遇到問題需要幫助調試? – 2013-02-20 21:40:35

+0

@RichChurcher只要包在我的GOROOT目錄中,我就可以構建並運行包含我的主函數的go文件。但是,如果我從那裏刪除它們並嘗試將它們放在我的api目錄下,則不會找到它們。當我嘗試使用pkg執行「go install」時,我得到:go install:沒有安裝位置用於_PACKAGE_PATH – user387049 2013-02-20 22:58:35

回答

3

如果你不這樣做設置GOPATH變量,軟件包將被安裝在不推薦的GOROOT中。如果你想將GOPATH設置爲「/ Applications/MAMP/htdocs/git/cbi/api」,請確保你的代碼目錄放在「/ Applications/MAMP/htdocs/git/cbi/api/src /」中。

 
However if I quit Terminal and then open it back up, and run "go env" again, the GOPATH variable is not set. 

就像jeremy說的,你應該在bash配置文件中設置環境變量。在mac os中,將此添加到您的$ HOME/.profile: export GOPATH=/Applications/MAMP/htdocs/git/cbi/api。 BTW,你可以指定多個GOPATH,爲exmple,export GOPATH=/path/to/gopath1:/path/to/gopath2

+0

經過深入研究,我相信這是正確的答案。我想我按照Joe的建議添加文件夾只是巧合。 – user387049 2013-02-26 20:27:09

1

請確保GOPATH有三個子文件夾:SRC,包裝/ linux_amd64(這其中有做的OS),濱

更多細節可以參考:GOPATHBuild

+0

我沒有pkg下的linux_amd64文件夾。不過,我在MAC OS X上添加了darwin_amd64。似乎沒有解決這個問題。 – user387049 2013-02-21 00:26:48

+0

是的,你的pkg是正確的。它是否仍然報告:去安裝:沒有_PACKAGE_PATH的安裝位置? – Joe 2013-02-21 00:38:08

+2

您不必親自設置darwin_amd64目錄。去安裝東西時,go工具會自動添加。您只需添加頂層src/pkg/bin /目錄。 – 2013-02-21 01:09:04

2

我的做法是通過將以下內容env.sh在我的項目目錄

export GOPATH=$PWD 
export PATH=$GOPATH/bin:$PATH 

然後我總是開始一個新的圍棋項目「源」此文件之前,我開始在一個新的終端窗口的工作,即

. env.sh 

後來,當我使用‘去拿’,它把所有下載的源代碼到當前項目文件夾,我可以交給我選擇版本控制系統。這是這種方法的優點:一切都保存在一個可以很容易地進行版本控制的目錄樹中。

如果我碰巧忘記了源代碼env.sh,Go命令通常會立即失敗,因爲我沒有對/ usr/local/go文件的寫入權限,這是它們默認的放置位置。所以我很快發現我沒有忘記。

相關問題