这是我参与「第五届青训营」伴学笔记创作活动的第 4 天
本篇内容
- 最小化版本选择算法
Minimal Version Selection
Previous Version
由module管理的go项目构建过程需要确定具体的模块版本列表。一次构建中所依赖的模块和版本列表称为build list,go项目一般不修改list尽可能保持不变,但也允许开发人员在有必要的情况下升级或降级。一般开发人员的操作可以分为四类:
- 生成当前项目的依赖和版本列表
- 升级所有依赖到最新版本
- 升级指定依赖到指定版本
- 降级指定依赖到指定版本
确定依赖的算法输入依赖和每个依赖要求的版本,输出拉取依赖的方案。在最小化版本选择算法应用之前,go使用两种称作低保真构建的选择算法,但都存在问题。
第一种算法是go get指令不带参数的默认模式,如果本地存在依赖的某个版本,则使用本地的版本,否则使用最新的版本。这种方式导致了版本过低无法使用新feature,导致依赖这些新feature的依赖构建失败。
第二种算法是go get -u指令的使用的方式。这种算法直接下载全部依赖的最新版本,解决了第一种算法版本过低的问题,但也导致版本过高从而构建失败,因为较新的依赖没有经过测试,可能无法正常工作。
这两种算法比较简单,也比较直接,但都会导致复杂依赖链情况下不同程度的依赖失真。因此,需要一种精确稳定的算法来获取项目的依赖关系。go module提出了一种新的依赖获取算法,称作最小化版本选择算法,这种算法可以构建高保真的依赖列表。
下一篇内容
- 最小化版本选择算法原理和实例