为什么 `go env` 命令不反映环境变量的变化?

在我的系统中,GOBIN变量未设置(空值)。现在不像其他一些 GO env 变量,即使在命令的输出中,这似乎也没有设置go env。(我是用户ubuntu,~也是/home/ubuntu/)


echo $GOBIN

   //empty

echo $GOPATH

   //empty

echo $GOROOT

   //empty

go env GOBIN

   //empty

go env GOPATH

/home/ubuntu/go

go env GOROOT

/usr/local/go

which go

/usr/local/go/bin/go

为什么go env给的值与系统环境变量不同?我找不到关于此的任何文档,但我的假设是,如果未在系统级别设置 env 变量,Golang 会设置默认值——由go env. 这个假设是否正确?


为什么GOBIN未设置?我尝试显式设置系统 env 变量,但它没有反映在 中go env,即使系统 env 变量似乎已被修改。为什么会这样?


echo $GOBIN

     //empty

go env GOBIN

     //empty

go env GOPATH

/home/ubuntu/go

GOBIN=‘/home/ubuntu/go/bin’

echo $GOBIN

/home/ubuntu/go/bin

go env GOBIN

     //empty

官方文档 ( https://pkg.go.dev/cmd/go ) 说:


env 打印 Go 环境信息


但它没有提到上述变量的来源。


问题 X ( https://xyproblem.info/ )


我正在尝试安装 Delve ( https://github.com/go-delve/delve ),我的系统有两个 go 版本 (go1.10.1和go1.17.8),我打算使用后者 (不幸的是无法删除前者)


go1.17.8 go install github.com/go-delve/delve/cmd/dlv@latest/home/ubuntu在=>创建一个新目录go并在此处添加 Delve。但却dlv version无法识别。从go help env,应该安装二进制文件的GOBIN位置go install- 在我的例子中它是未设置的,所以我猜 Golang 将它安装在GOPATH. 但即便如此,我还是希望二进制文件能够被识别。我也尝试将位置添加到我的PATH,但这也没有用。


我应该在通过安装之前将我的 GOBIN 设置为任何特定的东西go1.17.8吗?

我的系统是否有 2 个 go 版本(which go指向 go1.10.1 版本),导致了这个?(1.10.1 没有模块支持,但我正在尝试通过 go.17.8 安装,所以我认为这不是问题)


牛魔王的故事
浏览 274回答 2
2回答

qq_花开花谢_0

这些 go env 变量是在安装二进制文件时设置的变量。请参考https://github.com/golang的代码:根据https://github.com/golang/go/blob/master/src/internal/buildcfg/cfg.go,这些变量取自环境变量或默认变量。这些默认值是根据运行时生成的https://github.com/golang/go/blob/master/src/cmd/dist/buildruntime.go#L48因此,这些变量不会作为操作系统环境变量的一部分出现。这些变量可以被 os.UserConfigDir 中的配置文件或命令覆盖go env NAME=VALUE。

翻翻过去那场雪

go on Linux 会将持久设置存储到此文件中:$HOME/.config/go/env通过go env -w命令。由于 go 工具从这个配置和 ENV VARS 加载设置-这解释了为什么您可能会看到不同的值。go 工具结合了两者。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go