Linux

如何正確設置環境變數(Manjaro 上的 golang)

  • July 29, 2021

我的 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

太好了,現在我可以使用glidegovendor$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 getor安裝的 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,你必須設置它,請參閱答案頂部的說明。

引用自:https://unix.stackexchange.com/questions/484660