go mod 要求每个module从大版本2开始,模块路径必须有类似 /v2 版本号的后缀,假如module example.com/mod 从 v1.0.0发展到v2.0.0,这时它的go.mod中的模块路径应该修改为 example.com/mod/v2。go mod 认为如果一个module的两个不同版本之间引入路径相同,则它们必须是相互兼容的,而不同的大版本通常意味着是不兼容的,所以引入路径也不该相同,通过在模块路径上加上大版本后缀,这样就可以同时使用同一个模块的多个不同大版本。

对于 v0v1 两个大版本,go mod不允许存在版本后缀,这是因为 v0 版本通常是不稳定版本,不提供兼容性保证,并且通常 v1 版本兼容最新的 v0 版本,所以从 v0 版本迭代到 v1 版本,不需要修改module 路径 。

作为特殊情况,以 gopkg.in 打头的module 不管是 v0v1 还是其他大版本都必须存在版本后缀,且它的的版本后缀是用 ‘.’ 而不是 ‘/’,比如:


对于一些比较老的项目可能当时go mod还没出现,但版本早已经迭代到v2 以上,或者有些项目没有遵循以上的原则,go mod为了能够正常使用它们,会在引入 v2 以上的版本后加上 +incompatible 以示提醒,比如 github.com/docker/docker


且这样的项目根目录下不允许存在 go.mod 文件,如果项目添加了go.mod且又不遵循module path后缀原则,则将无法拉取到 v2 以上版本,如果手动指定v2 以上版本强制拉取则会报错:

对于那些比较老的go 模块,如果大版本已经达到 v2 以上,但不存在向后兼容问题,这时不建议添加 go.mod 文件,以便使用该模块的人能正常更新到最新版本,如果后续迭代出现大的变动已经无法向后兼容,这时应该升级一个大版本,并添加 go.mod 文件,同时模块path也要加上新的大版本后缀,使用者要使用该新版本则需要像引入一个新的模块一样使用带有后缀的module path。

深入探讨go.mod +incompatible相关推荐

  1. 【Go mod 学习之 incompatible 篇】对不符合语义版本规范的包进行标记

    总览 Go 专家编程 go mod incompatible 在前面的章节中,我们介绍了Go module的版本选择机制,其中介绍了一个Module的版本号需要遵循v<major>.< ...

  2. golang go/pkg/mod/github.com/agiledragon/gomonkey@v2.0.2+incompatible/patch.go:163:10: undefined: bu

    macos pro m1 设备 goland 运行test 提示: go/pkg/mod/github.com/agiledragon/gomonkey@v2.0.2+incompatible/pat ...

  3. go get 无法下载问题解决方案及下载 aliyun-oss-go-sdk incompatible.info

    1. 问题现象 由于众所周知的原因,使用 go get 时往往会速度很慢或者压根无法下载下来,如下所示: wohu@wohu:/$ go get -v github.com/aliyun/aliyun ...

  4. 深入探讨Python的import机制:实现远程导入模块 | CSDN博文精选

    来源 | Python编程时光(ID:Python-Time) 所谓的模块导入,是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用. 也许你看到这个标题,会说我怎么会发这么基础的文章? 与 ...

  5. 深入探讨编程到底需要知道多少数学知识

    全世界只有3.14 % 的人关注了 数据与算法之美 这篇文章中我会深入探讨编程中所需要的数学知识.你可能已经都知道了. 对于基本的编程,你需要知道下面的: 加减乘除 - 实际上,电脑会帮你作加减乘除运 ...

  6. go mod导入本地包

    利用go mod导入本地包 在实际项目开发过程中,为了完成一些功能,往往需要自己在本地新建一些包,然后在项目的其他go文件中调用该包.当使用go mod管理 包时,会出现一些错误,比如:如果我们本地的 ...

  7. Golang-Beego(go mod)

    告别GOPATH,快速使用 go mod(Golang包管理工具) beego开发文档 如果你还在使用 GOPATH 模式来开发Golang程序,那么你可以参考本文来告别 GOPATH,并带给你一个方 ...

  8. gocron mysql_[日常] gocron源码阅读-使用go mod管理依赖源码启动gocron

    从 Go1.11 开始,golang 官方支持了新的依赖管理工具go mod go mod download: 下载依赖的 module 到本地 cache go mod edit: 编辑 go.mo ...

  9. 5G和MEC在工业互联网中的应用探讨

    本文首发于<邮电设计技术>杂志,边缘计算社区经过授权发布. 摘要: 工业互联网已成为中国经济发展的重要战略之一,在工业化和互联网化两化融合的过程中存在诸多难题,需要 5G 和 MEC 等 ...

最新文章

  1. visio 2010 修改 默认字体 字号大小 方法
  2. Git错误:fatal: Not a git repository (or any of the parent directories)解决方法
  3. 每日一皮:这个不要轻易尝试,执行有生命危险
  4. openstack API debug OpenstackEveryProject_CLI,curl_based
  5. Vue3过渡动画实现
  6. jmeter测试接口--form表单提交请求(解决请求传参为空的问题)
  7. Android开发注意点小记
  8. ImageNet下载资源(2017年)
  9. 机器学习——Azure机器学习模型在线搭建实验原理+详细操作步骤+分析(以UCI数据库的数据为例)
  10. VMware Workstation 10序列号
  11. JavaScript重定向Referer丢失
  12. 国防科技大学 educoder C语言答案(湖南工业大学)
  13. ajax提交图片流,img显示
  14. html 调用桌面exe程序,如何使用HTML、CSS和JavaScript轻松构建桌面应用程序
  15. python虎扑社区论坛数据爬虫分析报告
  16. 2022河南萌新联赛第(二)场:河南理工大学 C - 斩龙
  17. Android_自定义倒计时View
  18. 【21天python打卡】第2天 python预备知识(2)
  19. Linux一个父进程创建两个子进程
  20. golang入门笔记—ES

热门文章

  1. 【菜鸟算题】错误票据--集合集合方法
  2. 下载安装SiteServer CMS
  3. 《薄冰实用英语语法详解》独家连载之十五:并列连词
  4. 《薄冰实用英语语法详解》连载之六:被动语态
  5. 如何制定SEO团队业绩考核标准
  6. iOS错误总结 “instance variable '******' accessed in class method”以及“autoreleasepool的用处
  7. 【Linux动态库.so/ELF文件】链接报错:/usr/bin/ld: 当搜索用于 .//libzlog.so 时跳过不兼容的 -lzlog
  8. WIN10 tensorflow1.12安装 CPU
  9. 解决Github登录问题: Support for password authentication was removed on August 13, 2021
  10. 如何突破路由器(TPLINK等)的IP带宽控制(限速)