Skip to content

后缀权重

关键

当两个版本的数字段完全相同时,按后缀权重决定先后。权重越大越「新」。绝大多数情况下稳定版 > 预发布版,但 sp/patch/post 是例外(见下方 warning)。

📊 权重表

权重值枚举后缀语义
0SuffixWeightUnknown未知无法识别
50SuffixWeightDevdev开发版
60SuffixWeightSnapshotsnapshot快照版
70SuffixWeightNightlynightly夜间构建
100SuffixWeightAlphaalphaAlpha
200SuffixWeightBetabetaBeta
300SuffixWeightMilestonemilestone (m)里程碑
400SuffixWeightRCrc候选发布
410SuffixWeightPrepre预发布
420SuffixWeightCRcrCR 变体
500SuffixWeightFinal/Release/GAfinal/release/ga正式版(三者等权)
600SuffixWeightSPsp服务包
700SuffixWeightPatchpatch补丁
800SuffixWeightPostpostPost 发布(PEP 440)

反直觉:sp/patch/post 高于正式版

sp(600)patch(700)post(800) 的权重大于正式版 final/release/ga(500)。语义上 1.0.0-sp11.0.0 正式版之后发布的服务包,1.0.0-post1 是 PEP 440 中正式版之后的修订。因此:

go
versions.NewVersion("1.0.0-post1").IsNewerThan(versions.NewVersion("1.0.0")) // true
versions.NewVersion("1.0.0-sp1").IsNewerThan(versions.NewVersion("1.0.0"))   // true

排序结果:1.0.0-rc1 < 1.0.0 < 1.0.0-sp1 < 1.0.0-post1

🔍 比较示例

权重从左到右递增——越靠右越「新」。注意 sp/patch/post 在正式版右侧,即比正式版更新。

go
a := versions.NewVersion("1.0.0-rc1")
b := versions.NewVersion("1.0.0")
a.IsNewerThan(b) // false — rc(400) < 稳定(500)

数字段相同,-rc1 的权重 400,无后缀的稳定版权重 500,故 1.0.0 更新。

🧮 子版本号

后缀里的数字(如 beta11rc22)作为子版本号参与细比较:

  • 1.0.0-beta1 < 1.0.0-beta2(同类后缀,子版本号小者更旧)

📚 延伸

基于 MIT 协议发布