跳转至

环境变量配置

环境变量

GOROOT

GOROOT 用来指定 go 的安装路径

GO 语言编译工具、标准库的安装位置

GOPATH

GOPATH 环境变量用来指定开发项目所在地址

GO111MODULE

GO111MODULE 环境变量用于开启或关闭 Go 语言中的模块支持,它有 off、on、auto 三个可选值,默认为 auto

  • GO111MODULE=off

无模块支持,go 会从 $GOPATH 文件夹和 vendor 目录中寻找依赖项

  • GO111MODULE=on

模块支持,go 忽略 $GOPATH 文件夹,只根据 go.mod 下载依赖

  • GO111MODULE=auto

$GOPATH/src 外层且根目录有 go.mod 文件时,开启模块支持;否者无模块支持

GOPROXY

用来配置 Go Module proxy,默认值是 https://proxy.golang.org,direct,在中国,为了加速获取 Module 的速度,可以将 GOPROXY 的值设置为 https://goproxy.cn,direct

GOPRIVATE

环境变量 GOPRIVATE 用来控制 go 命令把哪些仓库看做是私有的仓库,这样的话,就可以跳过 proxy server 和校验检查,这个变量的值支持用逗号分隔,可以填写多个值,例如:

GOPRIVATE=*.corp.example.com,rsc.io/private

这样 go 命令会把所有包含这个后缀的软件包,包括 git.corp.example.com/xyzzy , rsc.io/private, 和 rsc.io/private/quux 都以私有仓库来对待。

若所有需要配置的私有仓库都存在于一个组织下,如 github 下的组织 org_name,则直接填写组织名即可:

GOPRIVATE=github.com/org_name

另外,GOPRIVATE 环境变量可以被其他工具用来识别私有依赖,例如编辑器可以通过 GOPRIVATE 这个变量来决定是否为这个软件包添加一个指向 godoc.org 的文档链接。

为了更灵活的控制那些依赖软件包经过 proxy server 和 sumdb 校验,可以通过 GONOPROXY 和 GONOSUMDB 来单独进行控制,这两个环境变量的被设置后将覆盖 GOPRIVATE 环境变量,同样这两个变量也支持逗号分隔。

举个例子,如果公司内部提供了一个私有的 git server,用户可以这样来设置:

GOPRIVATE=*.corp.example.com
GOPROXY=proxy.example.com
GONOPROXY=none

这样 go 命令和其他工具就会把 corp.example.com 这个域名下的依赖包识别成私有的,但是用户仍然会从公司内部的代理镜像服务器 proxy.example.com 上下载所有公有和私有的仓库,因为用户设置了 GONOPROXY=none, 这个设置会覆盖 GOPRIVATE 变量

GOSUMDB

为了保证开发者的依赖库不被人恶意劫持篡改,Go team 推出了 Go module checksum database。服务器地址为:sum.golang.org。当你在本地对依赖进行变动(更新/添加)操作时,Go 会自动去这个服务器进行数据校验,保证你下的这个代码库和世界上其他人下的代码库是一样的。如果有问题,会有个大大的安全提示

Go1.13 会尝试对你的每一次依赖包下载操作进行验证,从而保证你下载的依赖包始终是一致的。这样就保证了每一次的编译都是可重复的,也能很好的发现异常的变更。和 go.mod 一样,Go 会帮我们维护一个名为 go.sum 的文件,它包含了对依赖包进行计算得到的校验值,文件中的每一行由三部分组成:

<module> <version>[/go.mod] <hash>

如果 go.sum 中的校验匹配失败了,Go 在编译下载的时候会给出提示

环境变量 GOSUMDB 可以用来配置你使用哪个校验服务器和公钥来做依赖包的校验, 就像下面:

GOSUMDB="sum.golang.org"

如果你的代码仓库或者模块是私有的,那么它的校验值不应该出现在互联网的公有数据库里面,但是本地编译的时候默认所有的依赖下载都会去尝试做校验,这样不仅会校验失败,更会泄漏一些私有仓库的路径等信息,可以使用 GONOSUMDB 这个环境变量来设置不做校验的代码仓库, 它可以设置多个匹配路径,用逗号相隔

GONOSUMDB=*.corp.example.com,rsc.io/private

私仓

GOPRIVATE=*.corp.example.com
GONOPROXY=none
GONOSUMDB=*.corp.example.com