在我的系统中,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
?我尝试显式设置系统环境变量,但它没有反映在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.1
和go1.17.8
(,我计划使用后者(不幸的是无法删除前者(
CCD_ 12在CCD_;go
并在此处添加Delve。但是dlv version
是不可识别的。从go help env
,GOBIN
是go install
应该安装二进制文件的地方——在我的情况下,它是未设置的,所以我猜Golang会在GOPATH
安装它。但即使在那时,我也期望二进制被识别。我还尝试将该位置添加到我的PATH
中,但也没有成功。
- 在通过
go1.17.8
安装之前,我应该将GOBIN设置为任何特定的值吗 - 我的系统是否有两个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-这解释了为什么您可能会看到不同的值。围棋工具将两者结合在一起。