首先Go Mod最好设置Goproxy,这样可以解决很多包拉取的问题:

1
go env -w GOPROXY="https://goproxy.cn,direct"

https://goproxy.io也可以,上面是国内的。

完成设置后,go 命令会从公共镜像 goproxy.io 上下载依赖包,并且会对下载的软件包和代码库进行安全校验,当你的代码库是公开的时候,这些功能都没什么问题。但是如果你的仓库是私有的怎么办呢?

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

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

命令行设置:go env -w GOPRIVATE=private.repo.com

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

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

1
GOPRIVATE=github.com/org_name

如果要更新不支持https协议的私有库,还需再做如下的配置。

  1. go get -insecure,但是很麻烦,每个包都需要手动在go mod下导入(go mod自己是不支持HTTP的,这么做是合理的);
  2. go env -w GOINSECURE=private.repo.com,设置GOINSECURE参数,非常方便。仅在go 1.14后新加入。