环境变量配置
环境变量
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 和校验检查,这个变量的值支持用逗号分隔,可以填写多个值,例如:
这样 go 命令会把所有包含这个后缀的软件包,包括 git.corp.example.com/xyzzy , rsc.io/private, 和 rsc.io/private/quux 都以私有仓库来对待。
若所有需要配置的私有仓库都存在于一个组织下,如 github 下的组织 org_name,则直接填写组织名即可:
另外,GOPRIVATE 环境变量可以被其他工具用来识别私有依赖,例如编辑器可以通过 GOPRIVATE 这个变量来决定是否为这个软件包添加一个指向 godoc.org 的文档链接。
为了更灵活的控制那些依赖软件包经过 proxy server 和 sumdb 校验,可以通过 GONOPROXY 和 GONOSUMDB 来单独进行控制,这两个环境变量的被设置后将覆盖 GOPRIVATE 环境变量,同样这两个变量也支持逗号分隔。
举个例子,如果公司内部提供了一个私有的 git server,用户可以这样来设置:
这样 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
的文件,它包含了对依赖包进行计算得到的校验值,文件中的每一行由三部分组成:
如果 go.sum 中的校验匹配失败了,Go 在编译下载的时候会给出提示
环境变量 GOSUMDB
可以用来配置你使用哪个校验服务器和公钥来做依赖包的校验, 就像下面:
如果你的代码仓库或者模块是私有的,那么它的校验值不应该出现在互联网的公有数据库里面,但是本地编译的时候默认所有的依赖下载都会去尝试做校验,这样不仅会校验失败,更会泄漏一些私有仓库的路径等信息,可以使用 GONOSUMDB
这个环境变量来设置不做校验的代码仓库, 它可以设置多个匹配路径,用逗号相隔