首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确设置环境变量(Manjaro上的golang)

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

Unix & Linux用户
提问于 2018-11-28 13:14:35
回答 1查看 11.2K关注 0票数 4

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

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

代码语言:javascript
复制
$ go run gitlab.com/gitlabtest
Hello, GitLab!

然后,我将检查是否有任何环境变量设置为:

代码语言:javascript
复制
$ echo $GOROOT

$ echo $GOPATH

$ echo $GOBIN

$

因此,似乎有非,这是奇怪的。为什么我可以运行我的测试程序?我尝试以另一种方式检查环境变量:

代码语言:javascript
复制
$ go env GOROOT
/usr/lib/go
$ go env GOPATH
/home/bluebrown/go
$ go env GOBIN

$ 

这很有趣。Go本身似乎对环境变量有一些了解。这可能就是为什么我可以在任何地方运行go代码,有效地针对$GOPATH。只有一个问题,$GOBIN似乎是未定的。

好的,这意味着我必须编辑我的~/..bash_profile。

代码语言:javascript
复制
#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export GOBIN=$HOME/go/bin

最后,我得到了我想要的结果,就像看上去的那样:

代码语言:javascript
复制
$ 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的包,比如滑动或政府,对吗?

代码语言:javascript
复制
[~]$ 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

嗯,也许不是。所以我试着滑翔:

代码语言:javascript
复制
$ 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中有什么包,都找不到。当我重新启动设备时,由于某种原因,一切都会再次被重置:

现在我不知道该怎么办了。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-11-28 15:22:53

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

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

代码语言:javascript
复制
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二进制文件,您将不得不设置它,请参阅答案顶部的说明。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/484660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档