【Go mod 学习之 incompatible 篇】对不符合语义版本规范的包进行标记
总览
- Go 专家编程 go mod incompatible
在前面的章节中,我们介绍了Go module的版本选择机制,其中介绍了一个Module的版本号需要遵循v<major>.<minor>.<patch>
的格式,此外,如果major
版本号大于1时,其版本号还需要体现在Module名字中。
比如Module github.com/RainbowMango/m
,如果其版本号增长到v2.x.x
时,其Module名字也需要相应的改变为: github.com/RainbowMango/m/v2
。即,如果major
版本号大于1时,需要在Module名字中体现版本。
那么如果Module的major
版本号虽然变成了v2.x.x
,但Module名字仍保持原样会怎么样呢? 其他项目是否还可以引用呢?其他项目引用时有没有风险呢?这就是今天要讨论的内容。
go mod 语义版本规范
在Go module时代,module版本号要遵循语义化版本规范,即版本号格式为
v<major>.<minor>.<patch>
,如v1.2.3。当有不兼容的改变时,需要增加major
版本号,如v2.1.0。Go module规定,如果
major
版本号大于1
,则major
版本号需要显式地标记在module名字中,如module github.com/my/mod/v2
。这样做的好处是Go module 会把module github.com/my/mod/v2
和module github.com/my/mod
视做两个module,他们甚至可以被同时引用。imcompatible 的作用是什么?
虽说有了 go mod 语义版本规范,但有人不遵循呀
# 以Module `github.com/RainbowMango/m` 为例,假如其当前版本为`v3.6.0` require (github.com/RainbowMango/m v3.6.0+incompatible ) # 而按照go mod 语义版本规范定义,应该新建个 mod ,命名为 github.com/RainbowMango/m/v3
- 不遵循规范,开发者就无法清除了解【兼容性的变动情况】,可能会给项目的依赖带来风险
1. 能否引用不兼容的包
我们还是以Module github.com/RainbowMango/m
为例,假如其当前版本为v3.6.0
,因为其Module名字未遵循Golang所推荐的风格,即Module名中附带版本信息,我们称这个Module为不规范的Module。
不规范的Module还是可以引用的,但跟引用规范的Module略有差别。
如果我们在项目A中引用了该module,使用命令go mod tidy
,go 命令会自动查找Module m的最新版本,即v3.6.0
。 由于Module为不规范的Module,为了加以区分,go 命令会在go.mod
中增加+incompatible
标识。
require (github.com/RainbowMango/m v3.6.0+incompatible
)
除了增加+incompatible
(不兼容)标识外,在其使用上没有区别。
2. 如何处理incompatible
go.mod
文件中出现+incompatible
,说明你引用了一个不规范的Module,正常情况下,只能说明这个Module版本未遵循版本化语义规范。但引用这个规范的Module还是有些困扰,可能还会有一定的风险。
比如,我们拿某开源Module github.com/blang/semver
为例,编写本文时,该Module最新版本为v3.6.0
,但其go.mod
中记录的Module却是:
module github.com/blang/semver
Module github.com/blang/semver
在另一个著名的开源软件Kubernetes
(github.com/kubernetes/kubernetes)中被引用,那么Kubernetes
的go.mod
文件则会标记这个Module为+incompatible
:
require (...github.com/blang/semver v3.5.0+incompatible...
)
站在Kubernetes
的角度,此处的困扰在于,如果将来 github.com/blang/semver
发布了新版本v4.0.0
,但不幸的是Module名字仍然为github.com/blang/semver
。那么,升级这个Module的版本将会变得困难。因为v3.6.0
到v4.0.0
跨越了大版本,按照语义化版本规范来解释说明发生了不兼容的改变,即然不兼容,项目维护者有必须对升级持谨慎态度,甚至放弃升级。
站在github.com/blang/semver
的角度,如果迟迟不能将自身变得"规范",那么其他项目有可能放弃本Module,转而使用其他更规范的Module来替代,开源项目如果没有使用者,也就走到了尽头。
【Go mod 学习之 incompatible 篇】对不符合语义版本规范的包进行标记相关推荐
- 网络安全学习第10篇 - ping程序的实现,抓包分析ping数据包以及ping工具对于网络安全方面的威胁
请结合附件:Ping的实现原理与ping.cpp的内容,编写一个程序,使其能够实现简单的ping的功能,即判断目标网站是否可以连接,然后通过Wireshark进行抓包分析其ICMP协议,指出哪个数据包 ...
- MySQL学习笔记-基础篇1
MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...
- R语言学习笔记——入门篇:第一章-R语言介绍
R语言 R语言学习笔记--入门篇:第一章-R语言介绍 文章目录 R语言 一.R语言简介 1.1.R语言的应用方向 1.2.R语言的特点 二.R软件的安装 2.1.Windows/Mac 2.2.Lin ...
- 我的世界java怎么开创造,MOD制作教程JAVA篇
您尚未登录,立即登录享受更好的浏览体验! 您需要 登录 才可以下载或查看,没有帐号?注册(register) x 本帖最后由 heidada 于 2011-5-12 21:33 编辑 首先我阅读了这个 ...
- 【SQL基础学习】----基础篇(1)
前言: 存储数据的容器 在内存中(数据存在易失性,断电即数据没了): 数组 集合 磁盘(永久存储): 文件(不易管理) 数据库(持久化, ...
- html5学习精选5篇案例
html5学习心得1 一:了解HTML5前端开发技术 HTML 指的是超文本标记语言 (Hyper Text Markup Language),标记语言是一套标记标签 (markup tag),HTM ...
- 深度学习——数据预处理篇
深度学习--数据预处理篇 文章目录 深度学习--数据预处理篇 一.前言 二.常用的数据预处理方法 零均值化(中心化) 数据归一化(normalization) 主成分分析(PCA.Principal ...
- [BTS]BizTalk学习之Functoid篇(ID Cross-References)
早在三周前,就已经收集了所有有关Cross-Reference Functoid的资源,虽然现在看来,它并不是很难,但想真正的应用它,还是需要花费一些心思的研究一下,不过,托了三周时间,还是写完了. ...
- RabbitMQ学习总结 第一篇:理论篇
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
最新文章
- Even Parity UVA - 11464 (枚举)
- 机器学习笔记:线性规划,梯度下降
- 趣谈网络协议笔记-二(第十一讲)
- ngx_lua应用最佳实践
- UART的FIFO功能
- 物联网带着诚意扑面而来
- 蓝桥杯 参考题目 黄金队列(水题)
- react native 第三方组件react-native-swiper 轮播组件
- Gradle基础介绍
- ccf 推荐会议和期刊
- Taro小程序生成二维码保存本地
- html ckplayer.swf,Flash基础入门之ckplayer.js视频播放插件
- python 天勤 金叉 编程代码_基于tqsdk(天勤)编译的均线交叉与通道突破相结合的交易系统...
- 苹果手机几月份最便宜_苹果手机越来越便宜,安卓手机越来越贵,果真是这样吗?...
- 电脑计算机c盘打不开怎么办,电脑的c盘炸了打不开电脑了怎么处理
- 父爱如山,催泪微电影感动全网
- 测试工程师的一点自省感悟
- 利用报废主板制作SPD刷内存编程器座子
- jvm调优五:jvm调优工具和调优实战
- 机器学习——课后习题解答
热门文章
- CNIM继续与国际核聚变组织合作,设计和制造用于未来聚变反应堆组件安装的高精度处理设备
- 如何通过API接口从淘宝(或天猫店)复制宝贝到拼多多(商品详情,商品销量,商品列表,商品主图,商品sku)接口代码对接教程
- GPS定位系统源码,GPSBDpro远程视频监控,实时视频+实时定位
- MATLAB-二维图形的绘制
- 网页播放器代码大全 超经典版
- SQL server 实验练习2
- 百分百财富管理软件V1.0
- 机器篇——决策树(五) 细说 评估指标的相关曲线(ROC、KS、PR)
- 一文了解Python编程语言及安装
- NC:南农沈其荣、张瑞福团队揭示多样性激发的确定性细菌装配过程限制群落功能...