go中的环境变量问题

时间:2014-01-27 01:53:58

标签: go environment-variables

我试图在我的.go文件上运行安装但是,它似乎失败了。它失败,因为我没有设置我的GOBIN环境变量。但是,当我回应它时,我确实得到了它的设置,因为我的.bashrc和.bash_profile文件确保它的设置。但是,它没有在环境中设置。出于某种原因,当实际设置时,go无法识别它的设置。

但是,如果我在shell上手动设置为:

me$ export GOBIN=$GOBIN

现在去env决定识别它,虽然我的.bashrc文件中有明确的行导出它,但我的回声确认了它的设置。有人知道为什么去表演很奇怪吗?

我尝试过的事情/参考

我的操作系统

mac osx mavericks。

GO VERSION

- 我去的版本是去版本go1.2 darwin / 386。我跑的时候

go version

我明白了:

go version go1.2 darwin/386

env识别的内容和环境变量

正在运行

go env

显示在我的终端中:

GOARCH="386"
GOBIN=""
GOCHAR="8"
GOEXE=""
GOHOSTARCH="386"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH=""
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_386"
TERM="dumb"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread -fno-common"
CXX="g++"
CGO_ENABLED="1"

.bashrc和.bash_profile的外观如何

我在.bash_profile中搜索我的.bashrc文件。即这里是我的.bash_profile中的这段代码:

if [ -f ~/.bashrc ]; then
  source ~/.bashrc #executes for bash subshells
fi

我还尝试手动(通过手动我的意思是在bash中明确地将其作为人类输入)源我的.bash_profile(因为那将运行我的.bashrc文件)并且env仍然无法识别它。

只有当我真正输入我的shell

me$ export GOBIN=$GOBIN

确实会返回我想要的内容:

GOARCH="386"
GOBIN="/Users/brando90/go/bin"
GOCHAR="8"
GOEXE=""
GOHOSTARCH="386"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH=""
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_386"
TERM="dumb"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread -fno-common"
CXX="g++"
CGO_ENABLED="1"

3 个答案:

答案 0 :(得分:3)

在相关的shell配置文件中尝试此操作:

export GOPATH=/path/to/your/go/workspace
export PATH=$GOPATH/bin:$PATH

不要设置GOBIN,因为它对99%的情况都没用(即单用户计算机; see the cmd docs)。完成这些更改后,请务必unset GOBIN

Go将知道安装二进制文件的位置,因为GOPATH/{bin, pkg, src}是Go处理的东西。另一方面,您的shell需要知道将$GOPATH/bin添加到路径中,以便您可以直接运行Go二进制文件。

答案 1 :(得分:3)

当其他人来看我的问题时,我想确保将来参考,他们知道问题是什么以及我如何解决它。

我的bash文件存在的问题之一是其中一个以下列方式导出:

export $GOBIN

而不是

export GOBIN

第二个是不正确的,当我这样做时修复了:

export GOBIN="$GOPATH/bin"

所以不起作用的原因是因为我的错误。但是,我总体上还学到了一些其他的东西。我了解到,当一个人进行安装"时,我们实际上并不需要为我的Unix环境变量设置GOBIN。当GOPATH变量设置正确时,当某人对某事做go install时,Go 知道 bin目录存在为GOPATH / bin。所以正确设置的重要一点是GOPATH而不是GOBIN。

正如elithrar前面提到的,如果你希望你的shell能够从你在go工作区中创建的编译文件中运行命令,你需要在你的PATH环境变量中加入GOPATH / bin。

感谢大家的帮助!

答案 2 :(得分:2)

尝试将export行放在.bash_profile而不是.bashrc

我读过终端总是将bash作为登录会话运行,因此会.bash_profile,而不是.bashrc

有关详情,请参阅Set environment variables on Mac OS X Lion