golang - Go 1.13 设置module代理
在Go 1.13版本中,GOPROXY代理比较成熟了,可以很方便的设置代理。
设置GOPROXY代理
目前国内比较好用的代理,可以用goproxy.cn
设置GOPROXY代理
go env -w GOPROXY=https://goproxy.cn,direct
这个配置是写到~/.config/go/env这个文件里面
在后面拼接一个 ,direct,是因为通过这样做我们可以在一定程度上解决私有库的问题(当然,goproxy.cn 无法访问你的私有库)。这个 GOPROXY 设定的工作原理是:当 go 在抓取目标模块时,若遇见了 404 错误,那么就回退到 direct 也就是直接去目标模块的源头(比如 GitHub) 去抓取。而恰好,GitHub 等类似的代码托管网站的原则基本都是“你无权访问的你来说就是不存在的”,所以我才说通过这样设定可以在一定程度上解决私有库无法通过模块代理访问的问题。
跳过私有库
设置GOPRIVATE来跳过私有库,比如常用的Gitea或Gitee,中间使用逗号分隔
go env -w GOPRIVATE=*.gitea.com,*.gitee.com
GOSUMB
Go 1.13 新推出了一个 GOSUMDB(默认值是 sum.golang.org,国内无法访问),就是为了实现这个目的,它的值是一个可信任的模块校验和数据库地址,通过指定它,go 将在抓取完模块时(无论是否是经过模块代理抓取的)对所有模块进行哈希校验,只有和校验和数据库中现有的一致时才算抓取成功。同 GONOPROXY 一样,Go 1.13 也为 GOSUMDB 配对发布了一个 GONOSUMDB,用法一致,作用是控制 go 应该忽略校验哪些 module path 下的模块。
如果在运行go mod vendor时,提示Get https://sum.golang.org/lookup/xxxxxx: dial tcp 216.58.200.49:443: i/o timeout,则是因为Go 1.13设置了默认的GOSUMDB=sum.golang.org,这个网站是被墙了的,用于验证包的有效性,可以通过如下命令关闭:
go env -w GOSUMDB=off