GO项目开发中存在多个包依赖同一个第三方包的不同版本的情况。例如包A依赖包C的v1.0.0版本,包B依赖包C的v2.0.0版本。go build时会按照高位兼容原则,取依赖包的v2.0.0版本。如果C未实现向前兼容,build时就会报错。

解决方法

最理想的解决方式是升级包A的版本,即执行

go get -u A

但如果A的最新版本依赖的是包C的v1.5.0版本,那么还是会遇到上述问题。这时候就需要对包B进行降级,降级步骤如下:

go get C@v1.5.0 // 先将包C降级到v1.5.0版本
go build // 编译时会自动下载符合的B版本包

总结

出现这个问题的根因是公共依赖包开发时未做向前兼容,开发Go模块时一定要做兼容,因为你不确定谁会引用这个模块。