最近Russ Cox发表了篇文章: Go += Package Versioning。从这篇文章开始,Go社区算是开始着手处理对待软件包管理问题了。这篇文章也算是为接下来的正式提案预热。

提案包含4个步骤:

  1. Import Compatiblity Rule: 导入兼容性规则。建议的规则很简单:如果一个新的package和老的package具有同样的import path,那么新的package就需要具备向后兼容性。Russ Cox指出,通过期待包的作者遵循这条规则,新的包管理系统不需要处理兼容性问题,这样会使得整个包管理系统更加简单和健壮。如果你熟悉OpenStack,那么你应该知道每个项目下的requirements有多麻烦,而且不同项目间还需要兼容同一个requirements。
  2. Minimal Version Select: 现在的包管理器一般都采用如下的策略:选择最新的版本。Russ Cox认为这是个错误的默认行为,因为只要上游软件包有更新,那么你的编译结果就会改变,这个不是开发者在大部分情况下所期望的行为。所以他采取的默认策略是选贼最老的版本。这个方案不仅使得编译结果稳定,而且也是软件包管理更加简单。
  3. Defining Go Modules: 一个Go module是一个package集合,这些package共享同样的import path prefix,称为module path。一个module定义在一个新的文件中,称为go.mod。一个module在网络上会存储成一个zip文件,可以通过HTTP协议下载,可以避免通过go get下载时需要安装各种cvs程序,而且也方便走代理。
  4. The go Command: go命令需要修改以支持Go Module。

基于这个目标,Russ Cox开发了一个新的go命令:vgo。这个新的工具支持版本管理。另一篇文章 https://research.swtch.com/vgo-tour 说明了这个工具的使用。

现在这个命令还处于开发阶段,但是已经实现了上述4个步骤中的前三个。


知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。