Go modules的历史

  • 1.11版本引入了Go Modules,默认GO111MODULE=off,需要手动修改至on才启动module模式。
  • 1.13版本中默认GO111MODULE=auto,会自动检测是否包含go.mod,如果包含则启用module模式。
  • 从1.14版本GoMod可供生产使用,并且鼓励所有用户从其他依赖关系管理系统迁移到Go Mod。
  • 1.16版本默认GO111MODULE=on,即一直启动module模式。

版本选择

通过require module version可以在go.mod文件中直接声明依赖项的版本,如require M v1.2.3

如果在go.mod文件中未直接require声明引入依赖的版本,在运行go build/go test等命令时会自动查找合适的module,并使用最新的版本作为require直接添加到go.mod文件中。

例如:import对应依赖M最新标记的release版本是1.2.3go.mod文件中将会出现require M v1.2.3,这表示M是允许>=v1.2.3版本的依赖项(<v2,给定v2被视为与v1不兼容)。

当项目中引入多个依赖,且部分存在依赖的同时有多个版本被引入时,Go是如何处理的呢?

更多内容分享,欢迎关注公众号:Go开发笔记

最小版本选择算法

最小版本选择算法用于选择build中使用的所有modules的版本。对于build中的每个module,通过最小版本选择算法选择的版本始终是主module或其依赖项之一通过require指令显式列出的版本中语义最高的版本,简单来说就是:使用require中的最高版本。

例如:如果你的module,依赖的module A需要require D v1.0.0,依赖的module B需要require D v1.1.1,最小版本选择算法将会选择D的v1.1.1版本用于build。即使后期D有v1.2.0版本可用,未显式requirego.mod中,仍将使用v1.1.1版本用于build。

D v1.0.0 -> module A--> mymod(D v1.1.1)
D v1.1.1 -> module B

检查选择的版本

如何查看build时选择的版本呢?

可以通过运行go list -m命令进行检查。

go list -m all可以查看所有依赖module的build版本。
go list -m moduleName可以查看指定依赖module的build版本。

gomod的版本选择策略相关推荐

  1. 理解深度学习中的学习率及多种选择策略

    学习率是最影响性能的超参数之一,如果我们只能调整一个超参数,那么最好的选择就是它.相比于其它超参数学习率以一种更加复杂的方式控制着模型的有效容量,当学习率最优时,模型的有效容量最大.从手动选择学习率到 ...

  2. 《流量的秘密 Google Analytics网站分析与商业实战》一2.2 版本选择的标准

    本节书摘来自异步社区<流量的秘密 Google Analytics网站分析与商业实战>一书中的第2章,第2.2节,作者 [英]Brian Clifton,更多章节内容可以访问云栖社区&qu ...

  3. Windows下Wireshark安装版本选择方式

    Windows下Wireshark安装版本选择方式 Wireshark版本分为1.X系列和2.X系列.1.X系列是早期版本,不提供中文版本.2.X系列是新版本,安装后,同时提供中文版和英文版.根据系统 ...

  4. hadoop商业版本选择对比

    记得刚接触到hadoop的时候跟大部分人一样都会抱怨hadoop的安装部署问题,对于一个新手来说这这的是个头疼的问题,可能需要花费一整天的时间才能把分布式环境安装配置好.在刚接触hadoop的一段时间 ...

  5. Spring Cloud Alibaba - 02 SpringCloud 、 SpringCloud Alibaba 、SpringBoot的生产版本选择

    文章目录 Spring Cloud 生态圈概览 Spring Cloud Spring Cloud Alibaba 版本选择 Spring Boot 版本说明 Spring Cloud 版本说明 Sp ...

  6. Hadoop版本选择探讨

    由于Hadoop版本混乱多变,因此,Hadoop的版本选择问题一直令很多初级用户苦恼.本文总结了Apache Hadoop和Cloudera Hadoop的版本衍化过程,并给出了选择Hadoop版本的 ...

  7. 史上最详细 最官方的 SpringBoot和SpringCloud的版本选择!!!! 绝对让你心服口服的版本选择方式!!!

    一.Springboot版本选择 1.1.git源码地址 SpringBoot 1.2.SpringBoot2.0新特性 https://github.com/spring-projects/spri ...

  8. 一篇文章让你轻松搞定SpringBoot和SpringCloud之间的版本选择!!!

    首先说明一下我认为我没有乱立标题或者是夸大标题,这篇文章肯定能告诉你该如何选择SpringBoot和SpringCloudd之间的版本,资料也是从官网拿的,并非胡乱捏造. 学的越来越多,基础不牢固,每 ...

  9. 【大数据技术】操作系统和Hadoop版本选择

    1.操作系统选择 Hadoop产品是由Java语言开发的,所以推荐的是Linux操作系统,理由很简单开源免费,推荐的操作系统CentOS. CentOS是一个基于Red Hat 企业级 Linux 提 ...

最新文章

  1. 【约束布局】ConstraintLayout 组件可见性 View.GONE 处理 与 Margin 属性 ( 约束布局可见性处理 | goneMargin 属性 )
  2. datagrid如何获取一行数据中的某个字段值_redis 所支持的数据类型以及其应用场景...
  3. StackExchange.Redis客户端读写主从配置,以及哨兵配置
  4. Cortex-M3的存储器系统
  5. php正则可以实现模糊匹配,正则表达式的模糊匹配功能如何实现
  6. 平方项知多少?平方项、分组回归与门槛模型
  7. android手机自带浏览器无法识别apk文件
  8. ASPF与NAT ALG的工作原理与应用
  9. 摄影欣赏:30幅五光十色的精美秋天风景摄影作品
  10. 【牛客网】C/C++牛客网专项刷题(04)
  11. uniPaas入门(magic最新版本改名叫uniPaas,unipaas也就是以前的magic)
  12. 【将百分制转换成五分制】
  13. 推荐一个开源库(Calligraphy)将ttf字体库加入到项目中,轻松实现各种字体
  14. C语言写三阶矩阵的转置
  15. 计算机毕业生寄语老师,计算机学院辅导员手写370张贺卡寄语毕业生
  16. 云服务器CentOS永久更改主机名
  17. Java知识点--类变量
  18. xpath爬取智联招聘--大数据开发职位并保存为csv
  19. VUE 爬坑之旅 -- 用 ES6 语法写一个工具类,并全局引用
  20. android 提醒app,安卓手机上提醒工作的软件有哪些?

热门文章

  1. JS 判断数组中是否包含某个值
  2. Lombok通过@Data注解生成get/set方法时,不生成某个字段的get/set方法
  3. python量化交易:quantOS_金融终端使用指南、下载地址及安装疑难解答
  4. 【leedcode】0004. 两个有序数组的中位数
  5. app上线前加固打渠道包
  6. Jmeter上传大文件无法上传报错的处理方法(Socket write error)
  7. [转载]深入理解JavaScript系列 --汤姆大叔
  8. 哈佛商学院要求学生必看的20部电影
  9. Android Q私有目录与公共目录文件的交互(读取,复制,保存等)——Pittkai
  10. java数组转字符串 字符串转数组