GOPROXY 代理

go get 工具目前通过两种方式下载模块:

  • VCS (版本控制工具): go 支持 git、svn 、hg、bzr、fossil 五种 VCS。
  • GOPROXY 协议 ,GOPROXY 的作用是通过 HTTP 请求在代理服务器上下载模块。
$ go env -w GOPROXY=https://goproxy.cn,direct

其意义为 go 下载模块时首先去 https://goproxy.cn 上下载,当 goproxy.cn 上找不到该模块(返回 404 或 410 错误码)则通过 direct 方式直接到模块对应的代码仓库下载代码(上述配置中的,分隔可以修改为|分隔拥,| 分隔时无论代理服务器发生了什么错误都尝试到后续的备选方案获取模块)。

GOPROXY拥有一个默认值proxy.golang.org在中国无法访问。

目前常用的代理是:

1、https://goproxy.cn
2、https://goproxy.io

GOPRIVATE 私有库

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

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

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

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

GOPRIVATE 较为特殊,它的值将作为 GONOPROXY 和 GONOSUMDB 的默认值,所以建议的最佳姿势是只是用 GOPRIVATE。

GONOPROXY 不走代理

公共 GOPROXY 能加快下载模块的速度但是不能解决私有化模块的拉取问题,因为这些公共 GOPROXY 服务器肯定是没有访问私有模块代码权限的。当然自己搭建一个私有化的 GOPROXY 服务器并授予访问权限可以解决,但是自己实现的成本比较高不推荐使用。可以使用GONOPROXY 环境变量来设置不需要通过代理下载的模块。

GONOSUMDB 不做校验

GONOSUMDB 这个环境变量来设置不做校验的代码仓库, 它可以设置多个匹配路径,用逗号相隔.

GOINSECURE

更新不支持https协议的私有库时用,

go: -insecure flag is no longer supported; use GOINSECURE instead

# 原先是:
go get -insecure
# 现在是
go env -w GOINSECURE=private.repo.com

参考资料: