Go micro/cli 很不专业,居然直接删库了!

大家好,我是煎鱼。

作为一个资深的 “技术客服”(经常回答处理各种问题),前段时间遇到了一个比较无语的事情。还埋伏了挺久。

在我朋友他们当年搭建微服务生态时,go-micro 是非常火的,也没有那么多其他 Go 框架的竞争对手。因此很多第三方库(例如:这次遇到是 sentinel 的库)有直接或间接依赖到他们。

但没有想到,最近有同学反馈自己在新环境运行程序后报错了。我一看,go-micro 组织下的这个库:github.com/micro/cli 竟然 “删库跑路” 了。。。

30ab29c2493809c71400164f33e370da.png

对应到程序里,执行 go mod tidy 命令后,会报如下报错:

github.com/micro/cli/v2@v2.1.2: invalid version: unknown revision v2.1.2
...

真的是挺无语的。

那为什么 micro/cli 要删库呢?我翻了一圈,好多人在 issues 提出了疑问。

官方给出了答复:

594ffa55a0a133346a67427951dc3b0c.png

原因是:“由于维护不善,已被弃用。“

这里最无语的是,弃用完全可以理解。但作为知名开源组织,有人引用和大量下载的情况下,竟然直接删库了,是非常的不讲武德的。

7a06af869f4a3e0472101b5b67cc4aa6.png
goproxy.cn 的模块统计数据

合理的调整,应该要把仓库转成归档仓库(Archiving repositories),对于用户较为友好。

这个问题,解决方向一般有以下几种:

1、万能 replace 和升级间接依赖库

这种情况下,直接在 go.mod 文件,把有问题的库 replace 掉就可以了。

像本文的例子,官方是建议 replace 为 github.com/urfave/cli/v2 即可。

显然遇到这种问题的,更多的是大量的存量程序。个人觉得这非常治标。总不能每个新同学来跑程序都要卡一会吧。😅

所以这个方案对于存量程序来讲,如果出问题的人都要 replace 一遍,那还不如直接当时就让他升级库,把依赖去掉了。

2、换合适的 GOPROXY 源

这个朋友一开始 GOPROXY 用的是 goproxy.io,但是这个镜像加速是不会对已删除库进行缓存的(或者会失效?)。我们只需要切换为 goproxy.cn 即可。

他在切换 GOPROXY 后,源库被删除的 micro/cli/v2 正常拉取。万事大吉。因为 goproxy.cn 会对已删除的库有缓存机制。做好了兜底策略。

这个方案可能是较为无感的。对于存量的同学来讲,如果一开始就使用的是 goproxy.cn,便不会有任何的感知。后面在渐进式的慢慢升级就好了。

另外其产线 CICD 配置的也是 goproxy.cn,所以一直没有被人发现。直至最近有人换新电脑新环境,重新配置时才遇到。

总结

一个知名开源库的维护是否标准,对于上下游的框架和工具均有一定的影响。对于这次发现 go-micro 直接删掉一个有近 20w 次下载的库,还是比较失望的。

在相关 issues 里也看到了不少国外开发者的无语。幸亏这次在 goproxy.cn 的缓存机制下有所兜底,否则免不了又是一次许多人介入的更新。或者再加一层的其他方案了。

推荐阅读

关注和加煎鱼微信,

一手消息和知识,拉你进技术交流群👇

deb549b1ec6d22ee41a7e2a5218bda15.jpeg

f80dbf5cbf309a01bbd94257f7cdb2fc.png

你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路

日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!

原创不易 点赞支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值