Skip to content

SDK API 索引

包信息

  • 导入路径github.com/scagogogo/versions-skills
  • 包名versions
  • 零重依赖:核心仅依赖 go-tuple / go-shuffle / go-compare-anything(golang-infrastructure 自研库)
  • Go 版本:≥ 1.21

完整的 SDK API 由若干类型函数组成,按能力域分组如下。每个条目都对应一篇专属文档页。

🧱 核心类型

类型文档说明
Versionsdk/api/version.md版本对象,封装 Raw / PublicTime / VersionNumbers / Prefix / Suffix / Metadata
VersionNumberssdk/api/version-numbers.md[]int 数字段,实现 CompareTo
VersionPrefixsdk/api/version-prefix.md数字前导(如 "v"
VersionSuffixsdk/api/version-suffix.md数字后内容(如 "-beta1"),按权重可比
SuffixWeightsdk/api/suffix-weight.md后缀语义权重枚举
VersionBuildersdk/api/version-builder.md流式构造 Version
VersionSlicesdk/api/version-slice.md[]*Version,实现 sort.Interface
VersionRangesdk/api/version-range.md版本区间,支持开/闭边界
VersionDiffsdk/api/version-diff.md两版本差值(major/minor/patch)
VersionGroupsdk/api/version-group.md同数字前缀的版本组
SortedVersionGroupssdk/api/sorted-version-groups.md有序索引,高效范围查询
ContainsPolicysdk/api/contains-policy.md范围查询的包含策略

🔗 约束类型

类型文档说明
Constraintsdk/api/constraint.md单约束条件,如 >=1.0.0
ConstraintOperatorsdk/api/constraint-operator.md运算符枚举(= != > >= < <= ^ ~ x
ConstraintSetsdk/api/constraint-set.mdAND 约束集(逗号分隔)
ConstraintUnionsdk/api/constraint-union.mdOR 约束联合(|| 分隔)

🛠 能力域函数

能力域文档代表函数
解析构造sdk/parsing.mdNewVersion / NewVersionE / MustParse / NewVersions / Coerce / CoerceE
版本属性sdk/properties.mdMajor / Minor / Patch / Segments / SubVersion / PreReleaseType
类型判断sdk/predicates.mdIsStable / IsPrerelease / IsAlpha / IsBeta / IsRC / IsSemver
比较sdk/comparison.mdCompareTo / IsNewerThan / IsOlderThan / Equals / IsBetween / Diff
排序sdk/sorting.mdSortVersionSlice / SortVersionStringSlice / VersionSlice.Sort
分组sdk/grouping.mdGroup / GroupByMajor / GroupByMinor / NewSortedVersionGroups
过滤sdk/filtering.mdFilter / FilterByConstraint / FilterByStable / FilterByMajor
集合运算sdk/set-operations.mdMin / Max / Difference / Intersection / Union / Partition
约束sdk/constraints.mdParseConstraint / ParseConstraintSet / NegateConstraint
范围查询sdk/range-query.mdNewClosedRange / NewOpenRange / VersionRange.Contains
不可变变更sdk/mutation.mdBumpMajor / WithPrefix / WithSuffix / WithMajor / Increment
文件 IOsdk/file-io.mdReadVersionsFromFile / WriteVersionsToFile / ReadVersionsFromReader
可视化sdk/visualization.mdVisualizeVersions / VisualizeVersionGroups
序列化sdk/serialization.mdMarshalJSON / UnmarshalJSON / MarshalText / Scan / Value

常用示例

解析与检查

go
v := versions.NewVersion("v1.2.3-beta1")
v.Major()          // 1
v.IsValid()        // true
v.IsPrerelease()   // true
v.PreReleaseType() // "beta"
v.IsSemver()       // true(semver 正则允许 v 前缀与预发布段)
v.SuffixWeight()   // 200 (beta)

比较

go
a := versions.NewVersion("1.0.0")
b := versions.NewVersion("1.0.0-rc1")
a.IsNewerThan(b)        // true(数字段相同,稳定版 > 预发布版,由后缀权重决定)

// 注意:Diff 只比数字段差值,不看后缀
a.Diff(b).IsUpgrade()   // false(major/minor/patch 差值都为 0,不算升级)
a.Diff(b).IsPatchChange() // false(同理,patch 差值为 0)

d := versions.NewVersion("1.2.3").Diff(versions.NewVersion("1.2.5"))
d.IsPatchChange()       // true(仅 patch +2)
d.IsUpgrade()           // true

排序与分组

go
list := versions.NewVersions("2.0.0", "1.0.0", "1.10.0", "1.5.0-beta")
sorted := versions.SortVersionSlice(list) // [1.0.0, 1.5.0-beta, 1.10.0, 2.0.0]

byMajor := versions.GroupByMajor(list) // map[int][]*Version{1: [...], 2: [...]}

约束

go
v := versions.NewVersion("1.5.0")
ok, _ := v.Matches(">=1.0.0,<2.0.0 || >=3.0.0") // true

c, _ := versions.ParseConstraint("^1.2.3")
v.Satisfies(c) // 用 Version 侧方法

范围查询

go
low := versions.NewVersion("1.0.0")
high := versions.NewVersion("2.0.0")
r := versions.NewClosedRange(low, high)
r.Contains(versions.NewVersion("1.5.0")) // true
r.Contains(versions.NewVersion("2.1.0")) // false

// 大列表反复查询
sg := versions.NewSortedVersionGroups(allVersions)
// 见 algorithms.md 第 7 节

不可变变更

go
v := versions.NewVersion("1.2.3")
v2 := v.BumpPatch()    // 1.2.4(v 不变)
v3 := v.WithSuffix("-rc1") // 1.2.3-rc1

从任意字符串提取

go
v := versions.Coerce("program-1.2.3-linux-amd64")
fmt.Println(v.Raw) // 1.2.3

设计要点

  • 不可变:所有 With* / Bump* 返回新对象,原对象不变。
  • Never nil from NewVersionNewVersion 永远返回非 nil 的 Version,用 IsValid() 判有效性。
  • SQL 支持Version 实现 sql.Scanner / driver.Valuer,可直接作为数据库字段。
  • 零依赖核心:核心库只依赖 go-tuplego-shufflego-compare-anything(golang-infrastructure)。

基于 MIT 协议发布