当前位置: 首页 > news >正文

深入探讨go.mod +incompatible

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。

相关文章:

  • maven的进阶学习
  • alluxio简单使用
  • Android基础入门教程——7.1.1 Android网络编程要学的东西与Http协议学习
  • 基于 R 语言的朴素贝叶斯介绍与实践
  • Android初学八之Android网络编程
  • Android 网络编程 记录
  • Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第13章 uni-app核心基础 13.3 常用特效
  • Oracle索引详解
  • R语言ggplot2可视化:去除可视化结果中的NA图例、删除缺失值图例
  • java生成带logo的二维码
  • RK平台UVC摄像头shell测试脚本
  • Kafka 0.11.0.2 安装备忘录
  • Radxa Rock 3a NPU调用指南
  • Java 线程中断、线程让步、线程睡眠、线程合并
  • Java笔记15 - 面向对象
  • axios 和 cookie 的那些事
  • const let
  • express如何解决request entity too large问题
  • node.js
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • passportjs 源码分析
  • PHP的类修饰符与访问修饰符
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue 2.3、2.4 知识点小结
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 简析gRPC client 连接管理
  • 区块链将重新定义世界
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 译有关态射的一切
  • Java总结 - String - 这篇请使劲喷我
  • python最赚钱的4个方向,你最心动的是哪个?
  • Spring Batch JSON 支持
  • 通过调用文摘列表API获取文摘
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​第20课 在Android Native开发中加入新的C++类
  • ​油烟净化器电源安全,保障健康餐饮生活
  • !!java web学习笔记(一到五)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (02)Hive SQL编译成MapReduce任务的过程
  • (06)金属布线——为半导体注入生命的连接
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (过滤器)Filter和(监听器)listener
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (四) Graphivz 颜色选择
  • (四)JPA - JQPL 实现增删改查
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • *1 计算机基础和操作系统基础及几大协议
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ C++ ] STL_list 使用及其模拟实现
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C# 网络编程系列]专题六:UDP编程
  • [C++]类和对象(中)
  • [Codeforces] number theory (R1600) Part.11