mac 中 go 的环境变量存储在哪里,如何配置,读取规则是什么?

1,636 阅读1分钟

#go #环境变量 #mac #macOS

存储在哪里

默认存储位置

go 安装之后会有一些默认的环境变量,可以理解为存储在 go 的可执行文件中,比如:

$ go env
GO111MODULE=""
GOARCH="amd64" # default
GOBIN=""
GOCACHE="/Users/test/Library/Caches/go-build" # default
GOENV="/Users/test/Library/Application Support/go/env" # default
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64" # default
GOHOSTOS="darwin" # default
GOINSECURE=""
GOMODCACHE="/Users/test/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin" # default
GOPATH="/Users/test/go:/Users/test/golang/lib"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/Cellar/go@1.15/1.15.15/libexec"
GOSUMDB="off"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go@1.15/1.15.15/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1" # default
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/9h/53ll_xxj5fv9vlgg11bnz4rc0000gn/T/go-build877917294=/tmp/go-build -gno-record-gcc-switches -fno-common"

以上这些环境变量如果没有手动配置过也有值就说明是 go 当前版本默认的环境变量。

手动配置的存储位置

go version < 1.13 通过 export配置环境变量,通常可以在用户目录的.bash_profile文件或者其他 shell能读取并执行的文件中手动添加需要配置的环境变量。

export GOPROXY=https://goproxy.cn,direct # 配置 GOPROXY 环境变量

go version >= 1.13 也可以使用上面的配置方式,我们还可以使用 go env -w 命令手动配置环境变量。该命令会将环境变量存储在 $HOME/Library/Application Support/go/env 文件中。

❗注意:$HOME/Library/Application Support/go/env 文件只有执行过 go env -w 命令才会被创建,默认情况下是不存在的。

比如当我们执行完 go env -w GOPROXY=https://goproxy.cn,direct 命令,$HOME/Library/Application Support/go/env 文件的内容就会新增一行内容如下:

GOPROXY=https://goproxy.cn,direct

读取规则

上面介绍了两种手动配置环境变量的方式,exportgo env -w,假如两种方式都配置了,读取的顺序是什么样的呢?

我自己测试了一下,这里直接说结论吧:

顺序为 export > go env -w,即优先读取 export 配置的环境变量,export 没有配置再读取 go env -w 配置的环境变量。

以上结论为本人测试验证得出,如果不正确,欢迎指正。🤝

总结

存储位置

默认在 go 的可执行文件中。 手动配置的存储位置:

  1. .bash_profile 适合所有 go 版本
  2. $HOME/Library/Application Support/go/env 适合 go version >= 1.13 版本

如何配置

  1. export
  2. go env -w

读取顺序

优先读取 export 配置的环境变量,export 没有配置再读取 go env -w 配置的环境变量。

完事🎉🎉🎉🎉

参考链接

go - Where are the golang environment variables stored? - Stack Overflow