The*_*ool 3 linux users environment-variables manjaro golang
我的 go 安装有问题。我正在使用 Manjaro,我认为这与此有关,因为 Manjaro 似乎以不同的方式处理 go env,然后由 ubuntu 和 windows 建议。
我已经安装并且可以按预期运行代码:
$ go run gitlab.com/gitlabtest
Hello, GitLab!
Run Code Online (Sandbox Code Playgroud)
然后我检查是否有任何环境变量设置:
$ echo $GOROOT
$ echo $GOPATH
$ echo $GOBIN
$
Run Code Online (Sandbox Code Playgroud)
所以似乎没有,这很奇怪。为什么我可以运行我的测试程序?我尝试以另一种方式检查环境变量:
$ go env GOROOT
/usr/lib/go
$ go env GOPATH
/home/bluebrown/go
$ go env GOBIN
$
Run Code Online (Sandbox Code Playgroud)
这太有趣了。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
Run Code Online (Sandbox Code Playgroud)
最后我得到了我想要的结果:
$ 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
Run Code Online (Sandbox Code Playgroud)
太好了,现在我可以使用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
Run Code Online (Sandbox Code Playgroud)
好吧,也许不是。所以我尝试滑行:
$ 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
Run Code Online (Sandbox Code Playgroud)
所以事实证明,无论我装什么包都$GOBIN找不到。当我重新启动设备时,由于某种原因,一切都再次重置:(
在这一点上,我不知道该怎么办了。
关于能够执行您使用go get或安装的 Golang 二进制文件go install,您需要将 Golang “bin”目录添加到您的目录$PATH中才能工作。
请注意,您实际上并不需要为此$GOBIN设置一个变量。如果您没有,只需在您的初始化文件之一(例如~/.bash_profile)中使用类似的内容:
PATH=$PATH:$HOME/go/bin
Run Code Online (Sandbox Code Playgroud)
(当然,如果你设置$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 以来的默认值)。
因此,同样,如果您对go get存储在默认位置的Golang 包(例如,您使用的包)感到满意,则您也不需要设置它。
最后,$GOBIN默认为 下的bin目录$GOPATH,因此您通常也不需要对其进行自定义。
正如您所注意到的,您可以使用go env来检查 Golang 对这些变量的概念是什么,如果您不设置它们,在这种情况下 Golang 应该使用上述默认值。
当然,如果你想从shell中引用这些变量,那么你需要设置它们!Golang 具有这些概念的默认值这一事实意味着它将能够处理未设置的变量......并不是说它会神奇地将这些注入到您的环境中。而且,再一次,如果你想要在你的 中使用 Golang 二进制文件$PATH,你必须设置它,请参阅答案顶部的说明。