【问题标题】:Problems with environment variables in gogo中的环境变量问题
【发布时间】:2023-04-09 03:12:02
【问题描述】:

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

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

me$ export GOBIN=$GOBIN

现在 go env 决定识别它,尽管我的 .bashrc 文件中有明确的行导出它并且我的 echo 确认了它的设置。有人知道为什么 go 表现得很奇怪吗?

我尝试过/参考的事情

我的操作系统

mac osx 小牛队。

开始版本

-我的 go 版本是 go1.2 darwin/386。当我跑步时

go version

我明白了:

go version go1.2 darwin/386

go 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 文件。 IE。这是我的 .bash_profile 中的这段代码:

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

我还尝试手动(手动我是指以人类身份在 bash 上明确键入)获取我的 .bash_profile(因为它无论如何都会运行我的 .bashrc 文件)并且 go env 仍然无法识别它。

只有当我真正输入我的 shell 时

me$ export GOBIN=$GOBIN

go env 是否返回我想要的:

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"

【问题讨论】:

  • 执行go versiongo env时的输出是什么?
  • go env 的输出是:go version go1.2 darwin/386 (如何让它看起来像注释中的代码?)
  • 对于 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"
  • 只需将其添加到您的帖子中即可。这种方式读起来太难了。:)
  • 我会将这些细节添加到我的问题中。

标签: go environment-variables


【解决方案1】:

我想确保当其他人来看我的问题时,他们知道问题出在哪里以及我是如何解决的,以供将来参考。

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

export $GOBIN

而不是

export GOBIN

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

export GOBIN="$GOPATH/bin"

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

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

感谢大家的帮助!

【讨论】:

    【解决方案2】:

    在你的相关 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 二进制文件。

    【讨论】:

    • 感谢 elithrar!顺便问一下,GOBIN 什么时候有用?现在 go 是否只使用我的 GOPATH 来做它需要的一切?
    • 根据Go cmd docs:“如果设置了 GOBIN 环境变量,命令将安装到它命名的目录而不是 DIR/bin。”换句话说,如果你想(也许)为已安装的 Go 二进制文件/程序设置一个通用的、系统范围的位置,它会很有用。在大多数情况下,你不会:)
    • 在 windows 上,如果我没有设置 GOBIN,它不会在我能找到的任何地方安装二进制文件。我的 GOPATH 设置正确,但 go 没有安装在 %GOPATH%/bin 中。超级混乱。
    【解决方案3】:

    尝试将export 行放入您的.bash_profile 而不是.bashrc

    我了解到终端始终将 bash 作为登录会话运行,因此将获取 .bash_profile,而不是 .bashrc

    更多信息请参见Set environment variables on Mac OS X Lion

    【讨论】:

    • 我有我的 .bash_profile 采购我的 .bashrc 文件。我应该在我的问题中这么说。
    • 这个答案我仍然对其他人有帮助,所以我仍然会喜欢它。谢谢:)
    • 奇怪。如果您执行 source .bash_profile 而不是手动运行 export 会发生什么?
    • 我知道这很奇怪!只有当我输入它时才会去 env 识别它。我确实尝试了 source .bash_profile 但仍然无法识别它。只有当我实际输入 export GOBIN=$GOBIN 时,它才会决定现在可以识别它...
    • 最后碰巧我有 export $GOBIN 而不是 export GOBIN
    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 2018-12-03
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2014-05-15
    • 2022-11-25
    相关资源
    最近更新 更多