为什么"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
  1. 为什么go env给出的值与系统环境变量不同?我找不到任何关于这方面的文档,但我的假设是,如果env变量没有在系统级别设置,Golang会设置默认值,如go env所示。这个假设正确吗?

  2. 为什么未设置GOBIN?我尝试显式设置系统环境变量,但它没有反映在go 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.1go1.17.8(,我计划使用后者(不幸的是无法删除前者(

CCD_ 12在CCD_;go并在此处添加Delve。但是dlv version是不可识别的。从go help envGOBINgo install应该安装二进制文件的地方——在我的情况下,它是未设置的,所以我猜Golang会在GOPATH安装它。但即使在那时,我也期望二进制被识别。我还尝试将该位置添加到我的PATH中,但也没有成功。

  1. 在通过go1.17.8安装之前,我应该将GOBIN设置为任何特定的值吗
  2. 我的系统是否有两个go版本(which go指向go1.10.1版本(,导致了这种情况?(1.10.1不支持模块,但我尝试通过go.17.8进行安装,所以我认为这不会是个问题(

这些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

因此,这些变量不会作为操作系统环境变量的一部分出现。

这些变量可以被操作系统的配置文件覆盖。UserConfigDir或通过命令go env NAME=VALUE

go在Linux上会将持久设置存储到此文件:

$HOME/.config/go/env

通过CCD_ 24命令。由于go工具从加载设置,此配置ENV VARS-这解释了为什么您可能会看到不同的值。围棋工具将两者结合在一起。

相关内容

  • 没有找到相关文章

最新更新