goproxy.cn - 为中国 Go 语言开发者量身打造的模块代理

昨天 Go 1.13 终于发布了,虽然比预期延迟了半个月之久,但毕竟迟到总比不到好。

Go 1.13 的发布为 Go 带来了不少变化(详见:https://golang.org/doc/go1.13 ),有些变化可能是开发者无法直接感觉到的,但有些又是和开发者日常开发息息相关的。其中,Go modules 的扶正就是这次 Go 1.13 发布中开发者能直接感觉到的最大变化。

Go modules 最早发布于 Go 1.11,经过两个版本的更新后,它作为依赖管理解决方案来说现在已经变得光彩夺目。随着 Go modules 一起被发布的还有一个叫做 Module proxy protocol 的协议,通过它我们可以搭建 Go 模块代理,最后交由 GOPROXY 环境变量以指引 go 命令后续在抓取模块时的途径。
对于咱们中国的开发者来说,一个优秀的 Go 模块代理可以帮助我们解决很多问题。比如 Go 语言中最知名的 golang.org/x/... 模块在中国大陆是无法访问到的,以前我们会用很多其他的办法来抓取他们,而若依靠一个可以访问到它们的模块代理,那么将事半功倍。

更因为 Go 1.13 将 GOPROXY 默认成了中国大陆无法访问的 https://proxy.golang.org ,所以我们中国的开发者从今以后必须先修改 GOPROXY 才能正常使用 go 来开发应用了。为此,我们联合中国备受信赖的云服务提供商七牛云专门为咱们中国开发者而打造了一个 Go 模块代理:goproxy.cn

什么是 goproxy.cn?

goproxy.cn 是目前中国最可靠的 Go 模块代理,这个如果有人存在质疑可以一一测试比对列表中所有能在国内访问的代理。对于那个和 goproxy.cn 域名比较相近的 goproxy.io,我之前已经发表过一篇实测文章(详见:https://studygolang.com/topic... )。

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

有人可能会问阿里云的也很快,而且阿里云也是大厂,为什么不用阿里云的模块代理(mirrors.aliyun.com/goproxy)。我只能说,当我在使用阿里云的代理做初始化 github.com/kubernetes/kubernetes 的测试时,出现了大量的 404 错误以至于初始化操作无法完成……而且它还不支持代理 GOSUMDB 的默认值也就是 sum.golang.org,因此你还得手动修改 GOSUMDB 才能够正常使用 go。在速度旗鼓相当的情况下,为什么不考虑直接使用一个更稳定、高可用的呢?而且毕竟 goproxy.cn 这个域名也很好记不是嘛~你只用记住 goproxy.cn,就没了。

Q&A

问:在 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.cnREADME 文件

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

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

问:在 Go 1.13 中如何防止从公共模块代理中抓取的模块被篡改?

答:Go 1.13 新推出了一个 GOSUMDB(默认值是 sum.golang.org ,国内无法访问),就是为了实现这个目的,它的值是一个可信任的模块校验和数据库地址,通过指定它,go 将在抓取完模块时(无论是否是经过模块代理抓取的)对所有模块进行哈希校验,只有和校验和数据库中现有的一致时才算抓取成功。同 GONOPROXY 一样,Go 1.13 也为 GOSUMDB 配对发布了一个 GONOSUMDB,用法一致,作用是控制 go 应该忽略校验哪些 module path 下的模块。

问:分别设置 GONOPROXYGONOSUMDB 很麻烦,有没有更好的办法?

答:有,Go 1.13 为了方便管理私有库规则,还推出了一个 GOPRIVATE,可以简单地理解成通过设置它就同时设置了 GONOPROXYGONOSUMDB

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容