后缀权重
关键
当两个版本的数字段完全相同时,按后缀权重决定先后。权重越大越「新」。绝大多数情况下稳定版 > 预发布版,但 sp/patch/post 是例外(见下方 warning)。
📊 权重表
| 权重值 | 枚举 | 后缀 | 语义 |
|---|---|---|---|
| 0 | SuffixWeightUnknown | 未知 | 无法识别 |
| 50 | SuffixWeightDev | dev | 开发版 |
| 60 | SuffixWeightSnapshot | snapshot | 快照版 |
| 70 | SuffixWeightNightly | nightly | 夜间构建 |
| 100 | SuffixWeightAlpha | alpha | Alpha |
| 200 | SuffixWeightBeta | beta | Beta |
| 300 | SuffixWeightMilestone | milestone (m) | 里程碑 |
| 400 | SuffixWeightRC | rc | 候选发布 |
| 410 | SuffixWeightPre | pre | 预发布 |
| 420 | SuffixWeightCR | cr | CR 变体 |
| 500 | SuffixWeightFinal/Release/GA | final/release/ga | 正式版(三者等权) |
| 600 | SuffixWeightSP | sp | 服务包 |
| 700 | SuffixWeightPatch | patch | 补丁 |
| 800 | SuffixWeightPost | post | Post 发布(PEP 440) |
反直觉:sp/patch/post 高于正式版
sp(600)、patch(700)、post(800) 的权重大于正式版 final/release/ga(500)。语义上 1.0.0-sp1 是 1.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 更新。
🧮 子版本号
后缀里的数字(如 beta1 的 1、rc2 的 2)作为子版本号参与细比较:
1.0.0-beta1<1.0.0-beta2(同类后缀,子版本号小者更旧)