10 分钟入门
本教程带你从零跑通 versions-skills:解析、比较、排序一个版本列表。
📦 安装
bash
go get github.com/scagogogo/versions-skills👋 第一个版本
go
package main
import (
"fmt"
"github.com/scagogogo/versions-skills"
)
func main() {
v := versions.NewVersion("v1.2.3-rc1")
fmt.Println(v.Raw) // v1.2.3-rc1
fmt.Println(v.IsValid()) // true
fmt.Println(v.Major()) // 1
fmt.Println(v.IsPrerelease()) // true
fmt.Println(v.IsRC()) // true
}永不为 nil
NewVersion 即便传入非法字符串也返回非 nil 指针,用 IsValid() 判定是否合法。
⚖️ 比较两个版本
go
a := versions.NewVersion("1.0.0")
b := versions.NewVersion("1.0.0-rc1")
fmt.Println(a.IsNewerThan(b)) // true — 稳定版 > 预发布版
fmt.Println(a.CompareTo(b)) // 1(a 更新)比较按 四级优先级:数字段 → 后缀权重 → 发布时间 → 原始字符串。
📊 排序与找最新
go
vs := versions.NewVersions("1.9.0", "1.10.0", "1.0.0", "v1.2.3-rc1")
sorted := versions.SortVersionSlice(vs)
fmt.Println(sorted[0].Raw) // 1.0.0(最旧)
fmt.Println(sorted[len(sorted)-1].Raw) // 1.10.0(最新!不是 1.9.0)
fmt.Println(versions.Max(vs).Raw) // 1.10.0语义排序
1.10.0 > 1.9.0——按数字比较,不是字典序。这是 versions-skills 解决的核心问题。