Files
4566704 1c9c717579 feat(verx): 自 go-hua/common 迁入版本号工具并独立成包
- 点分版本号解析/还原/比较,CompareVersion 依赖 numx.Min
- 附单元测试、examples/verx 例程与包 README
2026-09-20 12:20:51 +08:00

118 lines
2.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Package verx 版本号工具:点分版本号与结构互转、版本比较。
// VersionInfo 每段 2 字节(int64 存储,超出会溢出截断)。
package verx
import (
"fmt"
"strconv"
"strings"
"git.zeroonesoft.cn/golib/zogo/numx"
)
// VersionInfo 版本号结构(每段 2 字节,与点分字符串互转)
type VersionInfo struct {
VersionMajor int64 `json:"versionMajor"`
VersionMinor int64 `json:"versionMinor"`
VersionPatch int64 `json:"versionPatch"`
VersionBuild int64 `json:"versionBuild"`
}
// StringToVersionInfo 解析点分版本号字符串(如 1.2.3),每段最多 2 字节,超出会溢出截断
func StringToVersionInfo(str string) VersionInfo {
ver := VersionInfo{0, 0, 0, 0}
arr := strings.Split(str, ".")
if len(arr) > 0 {
ver.VersionMajor, _ = strconv.ParseInt(arr[0], 10, 64)
}
if len(arr) > 1 {
ver.VersionMinor, _ = strconv.ParseInt(arr[1], 10, 64)
}
if len(arr) > 2 {
ver.VersionPatch, _ = strconv.ParseInt(arr[2], 10, 64)
}
if len(arr) > 3 {
ver.VersionBuild, _ = strconv.ParseInt(arr[3], 10, 64)
}
return ver
}
// VersionComparison 版本比较 1.大于 -1.小于 0.等于
func VersionComparison(ver1 VersionInfo, ver2 VersionInfo) int {
if ver1.VersionMajor > ver2.VersionMajor {
return 1
} else if ver1.VersionMajor < ver2.VersionMajor {
return -1
}
if ver1.VersionMinor > ver2.VersionMinor {
return 1
} else if ver1.VersionMinor < ver2.VersionMinor {
return -1
}
if ver1.VersionPatch > ver2.VersionPatch {
return 1
} else if ver1.VersionPatch < ver2.VersionPatch {
return -1
}
if ver1.VersionBuild > ver2.VersionBuild {
return 1
} else if ver1.VersionBuild < ver2.VersionBuild {
return -1
}
return 0
}
// VersionToString 将版本结构转为点分字符串
func VersionToString(ver VersionInfo) string {
str := fmt.Sprintf("%d.%d.%d.%d", ver.VersionMajor, ver.VersionMinor, ver.VersionPatch, ver.VersionBuild)
return str
}
// CompareVersion 比较两个版本号 version1 和 version2,如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
func CompareVersion(version1 string, version2 string) int {
var arr1 = strings.Split(version1, ".")
var arr2 = strings.Split(version2, ".")
var length1 = len(arr1)
var length2 = len(arr2)
var length = numx.Min(length1, length2)
v1 := 0
v2 := 0
for i := 0; i < length; i++ {
if i < length1 {
v1, _ = strconv.Atoi(arr1[i])
} else {
v1 = 0
}
if i < length2 {
v2, _ = strconv.Atoi(arr2[i])
} else {
v2 = 0
}
if v1 != v2 {
if v1 > v2 {
return 1
} else if v1 < v2 {
return -1
}
}
}
if v1 > v2 {
return 1
} else if v1 < v2 {
return -1
}
return 0
}