goproxy.cn

515 阅读2分钟

什么是 goproxy.cn?

goproxy.cn 是目前中国最可靠的 Go 模块代理,这个如果有人存在质疑可以一一测试比对列表中所有能在国内访问的代理。

goproxy.cn 还是是一个非营利性项目,目标是为中国和世界上其他地方的 Gopher 们提供一个免费的、可靠的、持续在线的且经过 CDN 加速的模块代理。正因为 goproxy.cn 由中国 Go 语言第一个吃螃蟹的大公司七牛云运行,所以它的稳定性和运行速度都是毋庸置疑的,如果你的网络环境本身不差的情况下,它能快到让你不可思议,比 go get 传统的抓取方式快上了不止几倍。

在 Go 1.13 中如何使用 goproxy.cn?

答:一条 go env -w GOPROXY=https://goproxy.cn,direct 即可。之所以在后面拼接一个 ,direct,是因为通过这样做我们可以在一定程度上解决私有库的问题(当然, goproxy.cn 无法访问你的私有库)。这个 GOPROXY 设定的工作原理是:当 go 在抓取目标模块时,若遇见了 404 错误,那么就回退到 direct 也就是直接去目标模块的源头(比如 GitHub) 去抓取。而恰好,GitHub 等类似的代码托管网站的原则基本都是“你无权访问的你来说就是不存在的”,所以我才说通过这样设定可以在一定程度上解决私有库无法通过模块代理访问的问题。

在 Go 1.13 之前如何使用 goproxy.cn?

答:同样也是设置环境变量即可,但是得你手动配置,而且还不能使用上述的那个 ,direct 后缀,因为那是 Go 1.13 刚加的特性。详细配置方法可以参见 goproxy.cn 的 README 文件。

在 Go 1.13 中如何解决私有库问题?

答:在上述的回答中我有提到可以通过 Go 1.13 为 GOPROXY 新增的“代理列表”特性来为 goproxy.cn 做一个 fallback 选项,也就是 direct(直接从目标模块源头抓取),它就是解决私有库的一种途径,但并不是一个完美的解决方案。为此,Go 1.13 还推出了一个 GONOPROXY 环境变量,通过设置它我们可以实现控制让哪些 module path 忽略 GOPROXY,无脑回源。比如 GONOPROXY=*.corp.example.com 就意味着 go 在抓取所有 corp.example.com 的三级子域名下的所有模块时都将忽略 GOPROXY 设置直接回源到目标模块的原地址。

原文作者:@盛傲飞