如何正確設置環境變數(Manjaro 上的 golang)
我的 go 安裝有問題。我正在使用 Manjaro,我認為它與此有關,因為 Manjaro 似乎以不同的方式處理 go env,然後由 ubuntu 和 windows 建議。
我已經安裝並可以按預期執行程式碼:
$ go run gitlab.com/gitlabtest Hello, GitLab!
然後我檢查是否有任何環境變數設置為:
$ echo $GOROOT $ echo $GOPATH $ echo $GOBIN $
所以沒有看起來很奇怪的東西。為什麼我可以執行我的測試程序?我嘗試以另一種方式檢查環境變數:
$ go env GOROOT /usr/lib/go $ go env GOPATH /home/bluebrown/go $ go env GOBIN $
這太有趣了。Go 本身似乎對環境變數有一些了解。這可能就是為什麼我可以從任何地方執行 go 程式碼,有效地定位
$GOPATH
. 只有一個問題,$GOBIN
似乎沒有解決。好的,這意味著我想我必須編輯我的 ~/.bash_profile 。
# # ~/.bash_profile # [[ -f ~/.bashrc ]] && . ~/.bashrc export GOROOT=/usr/lib/go export GOPATH=$HOME/go export GOBIN=$HOME/go/bin
最後我得到了我想要的結果:
$ source .bash_profile $ echo $GOROOT &&echo $GOPATH &&echo $GOBIN /usr/lib/go /home/bluebrown/go /home/bluebrown/go/bin $ $ go env GOROOT &&go env GOPATH &&go env GOBIN /usr/lib/go /home/bluebrown/go /home/bluebrown/go/bin
太好了,現在我可以使用glide或govendor
$GOBIN
之類的軟體包,對嗎?[~]$ go get -u -v github.com/kardianos/govendor github.com/kardianos/govendor (download) [~]$ cd $GOPATH/src [src]$ mkdir testdir [src]$ cd testdir [testdir]$ govendor init bash: govendor: command not found
好吧,也許不是。所以我嘗試滑行:
$ curl https://glide.sh/get | sh $... $which: no glide in $ (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin: /usr/lib/jvm/default/bin:/usr/bin/site_perl: /usr/bin/vendor_perl:/usr/bin/core_perl:/usr/local/go/bin) glide not found. Did you add $GOBIN to your $PATH? Fail to install glide
所以事實證明,無論我有什麼包都
$GOBIN
找不到。當我重新啟動設備時,由於某種原因,一切都會再次重置:(在這一點上,我不知道該怎麼辦了。
關於能夠執行您使用
go get
or安裝的 Golang 二進製文件go install
,您需要將 Golang“bin”目錄添加到您$PATH
的目錄中才能正常工作。請注意,您實際上並不需要為此
$GOBIN
設置變數。如果您沒有,只需在您的一個初始化文件(例如~/.bash_profile
)中使用類似這樣的內容:PATH=$PATH:$HOME/go/bin
(當然,如果您確實設置了,請
$GOBIN
改用PATH=$PATH:$GOBIN
。)關於沒有設置 Golang 環境變數,這些天你在大多數情況下都不需要它們。
Golang 安裝解包位置的
$GOROOT
變數點。如果您使用“官方”發行版,則預設為/usr/local/go
,因此如果您將發行版解壓縮到該目錄中,則不必設置它。Linux 發行版通常將預設值自定義到它們打包 Golang 文件的位置,在 Manjaro 的情況下,更明智的/usr/lib/go
. 無論如何,如果您使用的是發行版中打包的 Golang,或者如果您將官方解壓到預設位置,則不需要設置該變數。關於
$GOPATH
,它曾經是必需的,但從 Golang 1.8 開始,它現在預設為~/go
:
GOPATH
可以是系統上的任何目錄。在 Unix 範例中,我們將其設置為$HOME/go
(自 Go 1.8 以來的預設值)。所以,再一次,如果你對儲存在預設位置的 Golang 包(例如,你使用的包
go get
)感到滿意,你也不需要設置它。最後,
$GOBIN
預設為bin
下的目錄$GOPATH
,因此您通常也不需要自定義它。正如您所注意到的,您可以使用
go env
檢查 Golang 對這些變數的概念是什麼,如果您不設置它們,在這種情況下,Golang 應該使用上述預設值。當然,如果你想從shell中引用這些變數,那麼你需要設置它們!Golang 對這些概念具有預設值這一事實意味著它將能夠處理未設置的變數……並不是說它會神奇地將這些變數注入您的環境中。而且,再一次,如果你想要 Golang 二進製文件
$PATH
,你必須設置它,請參閱答案頂部的說明。