我的围棋装置有问题。我正在使用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那太好了,现在我可以使用$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中有什么包,都找不到。当我重新启动设备时,由于某种原因,一切都会再次被重置:
现在我不知道该怎么办了。
发布于 2018-11-28 15:22:53
关于能够执行用go get或go install安装的Golang二进制文件,需要将Golang "bin“目录添加到$PATH中才能工作。
请注意,您实际上不需要设置一个$GOBIN变量才能工作。如果没有,只需在一个初始化文件(如~/.bash_profile)中使用类似的内容:
PATH=$PATH:$HOME/go/bin(当然,如果设置了$GOBIN,那么就使用PATH=$PATH:$GOBIN。)
对于没有设置Golang环境变量,现在大多数情况下都不需要它们。
$GOROOT变量指向Golang安装被解压的位置。如果您使用“官方”发行版,那么它默认为/usr/local/go,所以如果您将发行版解压缩到该目录中,则不必设置它。在Manjaro的例子中,Linux发行版通常会将缺省值定制到打包Golang文件的任何地方,这是比较明智的/usr/lib/go。不管怎么说,如果您使用的是来自发行版的打包Golang,或者如果您将官方版本解压缩到默认位置,则不需要该变量集。
关于$GOPATH,它曾经是必需的,但是从Golang1.8开始,它现在是默认为~/go:
GOPATH可以是系统上的任何目录。在Unix示例中,我们将其设置为$HOME/go(默认为Go 1.8)。
因此,同样,如果您可以将Golang包(例如,使用go get的包)存储在默认位置,您也不需要设置它。
最后,$GOBIN默认为$GOPATH下的bin目录,因此通常也不需要自定义它。
正如您注意到的,您可以使用go env来检查Golang关于这些变量的概念是什么,如果您不设置它们,那么Golang应该使用上面描述的默认值。
当然,如果您想从shell引用这些变量,那么您需要设置它们!事实上,Golang对这些概念有默认值,这意味着它能够处理未设置的变量.并不是说它会神奇地将这些注入到你的环境中。而且,再次,如果您想在您的$PATH中使用Golang二进制文件,您将不得不设置它,请参阅答案顶部的说明。
https://unix.stackexchange.com/questions/484660
复制相似问题