如何正确设置环境变量(Manjaro 上的 golang)

如何正确设置环境变量(Manjaro 上的 golang)

我的 go 安装有问题。我正在使用 Manjaro,我认为这与此有关,因为 Manjaro 处理 go env 的方式似乎与 ubuntu 和 windows 的 suggestest 不同。

我已经安装了 go 并且可以按预期运行代码:

$ 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

太好了,现在我可以使用$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都找不到。当我重新启动设备时,由于某种原因,所有内容都会再次重置:(

此时我不知道该怎么办了。

答案1

关于能够执行使用go get或安装的 Golang 二进制文件go install,您需要将 Golang“bin”目录添加到您的文件中$PATH才能正常工作。

请注意,你不真的需要$GOBIN设置一个变量才能使其工作。如果您没有,只需在您的初始化文件之一中使用类似的内容(例如~/.bash_profile):

PATH=$PATH:$HOME/go/bin

(当然,如果您确实设置了,$GOBIN请改为使用PATH=$PATH:$GOBIN。)


关于没有设置 Golang 环境变量,现在大多数情况下都不需要它们。

$GOROOT变量指向 Golang 安装的解压位置。如果您使用“官方”发行版,那么它默认为/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,则必须进行设置,请参阅答案顶部的说明。

相关内容