golang环境变量存储在哪里?

smw*_*dia 4 go

我刚开始在Windows 7上学习golang.

有了go env,我得到了这个:

set GOARCH=amd64
set GOBIN=
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=E:\Workbench\Go
set GORACE=
set GOROOT=C:\DevTools\Go
set GOTOOLDIR=C:\DevTools\Go\pkg\tool\windows_amd64
set CC=gcc
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0
set CXX=g++
set CGO_ENABLED=1
Run Code Online (Sandbox Code Playgroud)

然后我echo %envVar%在命令行中查看,我找到了env vars,如:

GOPATH
GOROOT
Run Code Online (Sandbox Code Playgroud)

但是找不到其他人.

那么它们存放在哪里?一些隐藏的配置文件?

wea*_*ing 8

请在命令提示符下键入以下命令

> go env GOENV
/root/.config/go/env
Run Code Online (Sandbox Code Playgroud)


Dav*_*rth 6

这些只是您平台的默认设置.将它们视为存储在go.exe可执行文件本身中.

您可以通过将它们设置为其他任何env var来覆盖它们.


Chi*_*xus 5

就像@David Budworth 所说的那样,这些变量是您平台的默认值。

大多数情况下我们会改变$GOPATH$GOROOT变量。例如,在我使用的 PC 中export GOPATH=/home/user/go,您的可能与我的不同。

否则,如果您想找到其他变量的存储位置,您需要查看/usr/lib/go-1.6/src(对不起,我现在使用的Ubuntu是 go 1.6,我不知道 Windows 中 go 的路径目录),您会发现有很多bash 脚本在构建go executable.

例如:

在文件中:make.bash你会看到:$GROOT在那里声明并用于构建最终的go executable

export GOROOT="$(cd .. && pwd)"
Run Code Online (Sandbox Code Playgroud)

我也看到了你的评论GOTOOLDIR,以及它如何知道你在你的盒子里的安装位置。我想说,go 的源代码有答案,你可以在这里找到它:

// ToolDir is the directory containing build tools.
var ToolDir = filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH)
Run Code Online (Sandbox Code Playgroud)

编辑: 我发现这篇关于构建 Go 的好文章:Go 如何用于构建自身

PS:对不起我的英语。我不是母语为英语的人。


Liu*_*Hao 5

在go1.13中,自定义的GOENV存储在GOENV中,由系统环境变量指定。如果未指定,将使用您平台的默认值。

要获取平台的默认位置,请使用go env GOENV: 在 Linux 上您将获得$HOME/.config/go/env,在 macOS 上您将获得$HOME/Library/Application Support/go/env.

$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN="/home/leonardo/go/bin"
GOCACHE="/home/leonardo/.cache/go-build"
GOENV="/home/leonardo/.config/go/env" # if system environment 'GOENV' is empty, the default value for your platform will be used.
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/leonardo/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct" # default value is "https://proxy.golang.org,direc"
Run Code Online (Sandbox Code Playgroud)
$ cat ~/.config/go/env
GOPROXY=https://goproxy.cn,direct
Run Code Online (Sandbox Code Playgroud)

在此文件中使用“KEY=VALUE”形式定义的环境变量将覆盖在https://github.com/golang/go/blob/57662b1575030aa09043cd7a48425abdc6e0e0a3/src/cmd/go/internal/cfg/cfg.go硬编码的默认值#L229