Skip to content

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 解决的核心问题

🚀 下一步

基于 MIT 协议发布