提一下 Golang 的依赖管理。
在过去,Golang 没有官方的 go mod,那时候依赖管理都是一塌糊涂,然后渐渐的出现了很多第三方包管理器,但是没有一个好用的。
除开包管理器,也有人做了版本管理来控制版本,以此来凑活,
gopkg.in 因此诞生,用这个做版本管理的库还不少,比如 go yaml 等等。
go mod 出来之后,一切都变好了吗?然而并没有,只是大部分情况下变好了。
它对库的规范很严格,很多库因为之前没有版本管理,都使用的一些骚操作来实现版本管理。比如,用 v1 v2 这种目录的形式来管理版本。
一些库开启了 go mod 之后,各种历史遗留原因加上循环依赖,灾难就降临了
最典型的例子就是 etcd 了,etcd, grpc, viper 循环依赖…,碰到过的人,肯定都觉得坑爹
想解决这个问题,只能一个个 replace,但是后续升级依赖,可能就又会碰到这个问题了。
只要项目复杂,包管理器再好用…也会变得复杂,只能从源头上处理这个问题,不要随意使用第三方库,非要用的情况下,要进行多方面考虑。
比如,库的活跃程度,库是否引用了第三方库,库引用的第三方库是否引用了第三方库……