2014-01-27 75 views
1

我試圖運行去安裝在我的.go文件,但是,它似乎失敗。它因爲我的GOBIN環境變量未設置而失敗。但是,當我回應它時,我確實知道它的設置,因爲我的.bashrc和.bash_profile文件確保它的設置。但是,它並沒有設置在去env。出於某種原因,當實際設置時,go不會識別它的集合。環境變量中的問題go

不過,如果我手動設置我的殼爲:

me$ export GOBIN=$GOBIN 

現在去ENV決定承認它沉綿我有我的.bashrc文件明確的線出口它和我的回聲證實其設定。有人知道爲什麼要表現奇怪嗎?

的事情,我已經試過/參考

我的操作系統

的Mac OSX小牛。

GO版本

- 我走的版本是去版本go1.2達爾文/ 386。當我運行

go version 

我得到:

go version go1.2 darwin/386 

什麼去包膜識別和環境變量

跑在我的終端

go env 

顯示:

GOARCH="386" 
GOBIN="" 
GOCHAR="8" 
GOEXE="" 
GOHOSTARCH="386" 
GOHOSTOS="darwin" 
GOOS="darwin" 
GOPATH="" 
GORACE="" 
GOROOT="/usr/local/go" 
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_386" 
TERM="dumb" 
CC="gcc" 
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread -fno-common" 
CXX="g++" 
CGO_ENABLED="1" 

如何我的.bashrc和.bash_profile文件看起來像

我的採購我的.bashrc文件在我的.bash_profile中。即這裏這段​​代碼在我的.bash_profile:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrC#executes for bash subshells 
fi 

我也嘗試手動(手動我的意思是在慶典明確鍵入它作爲一個人)來源我的.bash_profile(因爲這將運行我的.bashrc文件無論如何)並去env仍然無法識別它。

只有當我從字面上鍵入我的殼

me$ export GOBIN=$GOBIN 

不會去包膜回到我想要的東西:

GOARCH="386" 
GOBIN="/Users/brando90/go/bin" 
GOCHAR="8" 
GOEXE="" 
GOHOSTARCH="386" 
GOHOSTOS="darwin" 
GOOS="darwin" 
GOPATH="" 
GORACE="" 
GOROOT="/usr/local/go" 
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_386" 
TERM="dumb" 
CC="gcc" 
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread -fno-common" 
CXX="g++" 
CGO_ENABLED="1" 
+0

執行'go version'和'go env'時的輸出是什麼? –

+0

go env的輸出是:go version go1.2達爾文/ 386(你如何使它看起來像評論中的代碼?) – Pinocchio

+0

for go env它: GOARCH =「386」 GOBIN =「」 GOCHAR = 「8」 GOEXE = 「」 GOHOSTARCH = 「386」 GOHOSTOS = 「達爾文」 GOOS = 「達爾文」 GOPATH = 「」 GORACE = 「」 GOROOT = 「/ USR /本地/去」 GOTOOLDIR = 「/ usr/local/go/pkg/tool/darwin_386」 TERM =「dumb」 CC =「gcc」 GOGCCFLAGS =「 - g -O2 -fPIC -m32 -pthread -fno-common」 CXX =「g ++ 「 CGO_ENABLED =」1「 – Pinocchio

回答

3

在有關殼輪廓試試這個:

export GOPATH=/path/to/your/go/workspace 
export PATH=$GOPATH/bin:$PATH 

不要設置GOBIN,因爲它不是病例的99%有用的(即單個用戶的機器; see the cmd docs)。進行這些更改後請確保unset GOBIN

Go會知道在哪裏安裝二進制文件,因爲GOPATH/{bin, pkg, src}是Go爲您處理的東西。另一方面,您的shell需要知道將$GOPATH/bin添加到您的路徑,以便您可以直接運行Go二進制文件。

+0

謝謝elithrar!就像一個側面問題,GOBIN什麼時候有用呢?現在只用我的GOPATH去做它需要的一切嗎? – Pinocchio

+0

根據[Go cmd docs](http://golang.org/cmd/go/):「如果設置了GOBIN環境變量,命令會安裝到它所命名的目錄而不是DIR/bin。」換句話說,如果您想(可能)爲已安裝的Go二進制文件/程序設置一個通用的系統範圍的位置,這將非常有用。在大多數情況下,您不需要:) – elithrar

+0

在Windows上,如果我沒有設置GOBIN,它不會在任何可以找到的地方安裝二進制文件。我的GOPATH設置正確,但不會安裝在%GOPATH%/ bin中。超級混亂。 – kmiyashiro

2

嘗試把export線在你.bash_profile,而不是.bashrc

我讀過終端始終運行bash作爲登錄會話,因此將源.bash_profile,但不是.bashrc

請參閱Set environment variables on Mac OS X Lion瞭解更多信息。

+0

我有我的.bash_profile採購我的.bashrc文件。我應該在我的問題中說。 – Pinocchio

+0

這個答案我仍然對別人有幫助,所以我仍然會喜歡它。謝謝:) – Pinocchio

+0

奇怪。如果您執行'source .bash_profile'而不是手動運行'export',會發生什麼? – Intermernet

2

我想確保將來的參考,當其他人來看我的問題時,他們知道是什麼問題以及我如何修復它。

我的一個bash的文件已被其中一人以下列方式出口的問題:的

export $GOBIN 

代替

export GOBIN 

其中,第二是不正確的,這是固定的,當我做:

export GOBIN="$GOPATH/bin" 

所以沒有工作的原因是因爲我特別的錯誤。但是,我總體上學到了一些其他的東西。我瞭解到,當一個人「安裝」時,我們實際上並不需要爲我的Unix環境變量設置GOBIN。當GOPATH變量設置正確時,當其中一個執行go install時,Go 知道 bin目錄作爲GOPATH/bin存在。所以正確設置的重要事項是GOPATH而不是GOBIN。

正如前面提到的,如果你希望你的shell能夠從你編譯的文件中運行你可能在你的工作區中做出的命令,你需要把你的PATH環境變量放在GOPATH/bin中。

感謝大家的幫助!