Golang解决依赖的经验
如果有兴趣,可以跟我联系交流:这里
[toc]
这次在继续对基于argo的workflow调度器进行开发时,在golang的依赖管理上遇到了一些问题,也获得了一些经验。 此次开发的调度器依赖了 argo workflow project , argo又依赖了kubernetes的一些组件,如 k8s.io/client-go,k8s.io/api,k8s.io/apimachinery,然后他们也有自己的依赖。尤其是这三个组件的开发迭代速度快,版本也繁多,版本的命名和版本之间的兼容性较复杂,得自己仔细研究k8s的官方依赖描述。也因此经常产生由于各组件之间的依赖不匹配导致编译失败的问题,当然,解决办法也很直白,就是弄清楚版本依赖,并利用golang modules功能将依赖版本锁定。
有3种解决依赖的办法:直接按照依赖链锁定版本、去github project里搜索issue、直接拿着错误信息去google。
直接按照依赖链锁定版本
当直接依赖的项目有自己的go.mod时,该方法最简便,否则就要看看剩下的两种方法。依赖链是这样的:我的调度器 -> argo workflow -> k8s 组件。所以,首先确定自己要使用argo workflow的版本,然后找到对应的tag或者branch,然后进去看他的go.mod中依赖的k8s组件的版本号,然后直接使用对应版本的组件,并且在自己的项目的go.mod中进行锁定。该方法效率最高。
去github project里搜索issue
如果没那么幸运,自己依赖的组件没有go.mod,那么只好去该项目的issue列表里搜索关键词,看看有没有解答。
直接拿着错误信息去google
如果github project里也没有,那么就只好google搜索报错信息的关键词了。一般质量比较好的答案会落在github和Stack Overflow上。