再探go modules:使用与细节 (4)

接下来使用go build -mod=vendor来构建项目,因为在go modules模式下go build是屏蔽vendor机制的,所以需要特定参数重新开启vendor机制:

go build -mod=vendor ./my-module a notify!

构建成功。当发布时也只需要和使用godep时一样将vendor目录带上即可。

注意包版本

其实这是第一部分的老生常谈,当你发布一个v2+版本的库时,需要进行以下操作:

将module my-module改成module my-module/v2

将源代码中使用了v2+版本包的import语句从import "my-module"改为import "my-module/v2"

仔细检查你的代码中所有my-module包的版本是否统一,修改那些不兼容的问题

在changelog中仔细列出所有breaking changes

当然,如果你觉得前面四步过于繁琐,注明你的用户需要指定+incompatible是一个暂时性的解决方案。

注意以上几点的话发布go modules也就是一个轻松的工作了。

小结

相比godep和vendor机制而言,go modules已经是向现代包管理器卖出的坚实一步,虽然还有不少僵硬甚至诡异的地方,但是个人还是推荐在go1.12发布后考虑逐步迁移到go modules,毕竟有官方的支持,相关issues的讨论也很活跃,不出意外应该是go包管理方案的最终答案,现在花上一些时间是值得的。

当然包管理是一个很大的话题,就算本文也只是讲解了其中的一二,以后我也许有时间会介绍更多go modules相关的内容。

总之go modules还是一个新兴事物,包管理器是一个需要不断在实践中完善的工具,如果你有建设性的想法请尽量向官方反馈。

go modules的官方wiki也上线一段时间了,这篇文件基本上是与其结合的查漏补缺,同时也夹杂了一些个人见解,所以难免有所错误疏漏,欢迎指正。

参考

go modules wiki

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjydj.html