|
@gongym 兼容说是兼容,可这不是理想情况吗。
按照 Hyrum’s Law ,实际上你已经依赖了 Go 内部的非公开实现,而你永远不知道你的同事和你依赖的库有什么骚操作。这样的例子其实有很多:
1. 依赖反射和 unsafe ,这些库不保证行为兼容。unsafe 就不说了。reflect 更隐蔽,比如`reflect.DeepEqual` 的行为变过。你用高版本的 Go 去编译老版本不带修复的 K8s ,你会发现一堆 CR 提交不上去。
2. 依赖黑魔法注解,一堆库被 rcs 在 Go 源码里拉耻辱柱群,这些库多半你用过:containerd 、protobuf 、sonic ;有一些改了退群了,有一些一直还在。
3. 你依赖了 golang.org/x 下面的库,这玩意的版本很玄学,兼容性就更别说了。 |