解析与检查
深入解析版本号字符串,提取各组成部分,并判断版本类型。
🧱 拆解结构
go
v := versions.NewVersion("v1.2.3-beta1+build.7")
fmt.Println(v.Prefix) // v
fmt.Println(v.VersionNumbers) // [1 2 3]
fmt.Println(v.Suffix) // -beta1
fmt.Println(v.Metadata) // build.7
fmt.Println(v.Segments()) // [1 2 3]
fmt.Println(v.SubVersion()) // 1(后缀里的子版本号)字段语义见 版本号结构。
🏷 类型判断
Version 提供一族 Is* 谓词:
go
v := versions.NewVersion("1.0.0-beta2")
v.IsStable() // false
v.IsPrerelease() // true
v.IsBeta() // true
v.IsAlpha() // false
v.IsRC() // false
v.PreReleaseType() // "beta"
v.SuffixWeight() // 200 (SuffixWeightBeta)完整谓词见 谓词方法索引。
✅ 校验
go
v, _ := versions.NewVersionE("not-a-version")
fmt.Println(v.IsValid()) // false
err := v.Validate() // ErrVersionInvalid
err = v.ValidateSemver() // 严格 SemVer 校验🎯 从文本提取(Coerce)
go
v := versions.Coerce("download/app-1.2.3-linux-amd64.tar.gz")
fmt.Println(v.Raw) // 1.2.3Coerce 在任意字符串中找第一个版本号模式子串。