1 Star 0 Fork 0

ixgo/ixUtils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
ver.go 1.91 KB
一键复制 编辑 原始数据 按行查看 历史
lixu 提交于 2025-09-19 17:12 +08:00 . Initial commit
/*
* @Date: 2025-09-17 18:32:49
* @LastEditors: lixu lixu@puchigames.com
* @LastEditTime: 2025-09-17 18:33:58
* @FilePath: /go-helper/utils/ver.go
* @Description:版本号工具函数
*/
package ixUtils
import (
"strconv"
"strings"
)
// CompareVersion 比较版本号大小
// 返回值:1表示v1>v2,-1表示v1<v2,0表示v1=v2
// 支持格式:1.2.3、v1.2.3、1.2.3-alpha、1.2.3.4等
func CompareVersion(v1, v2 string) int {
// 清理版本号前缀
v1 = cleanVersion(v1)
v2 = cleanVersion(v2)
// 分割版本号
parts1 := splitVersion(v1)
parts2 := splitVersion(v2)
// 获取最大长度
maxLen := len(parts1)
if len(parts2) > maxLen {
maxLen = len(parts2)
}
// 逐段比较
for i := 0; i < maxLen; i++ {
var p1, p2 int
// 获取第i段的数值
if i < len(parts1) {
p1 = parseVersionPart(parts1[i])
}
if i < len(parts2) {
p2 = parseVersionPart(parts2[i])
}
// 比较当前段
if p1 > p2 {
return 1
} else if p1 < p2 {
return -1
}
}
return 0
}
// cleanVersion 清理版本号,去除前缀和后缀
func cleanVersion(version string) string {
// 去除v前缀
if strings.HasPrefix(version, "v") || strings.HasPrefix(version, "V") {
version = version[1:]
}
// 去除后缀(如-alpha, -beta, -rc1等)
if idx := strings.Index(version, "-"); idx != -1 {
version = version[:idx]
}
if idx := strings.Index(version, "+"); idx != -1 {
version = version[:idx]
}
return strings.TrimSpace(version)
}
// splitVersion 分割版本号
func splitVersion(version string) []string {
return strings.Split(version, ".")
}
// parseVersionPart 解析版本号段为数字
func parseVersionPart(part string) int {
// 去除非数字字符
numStr := ""
for _, r := range part {
if r >= '0' && r <= '9' {
numStr += string(r)
} else {
break
}
}
if numStr == "" {
return 0
}
num, err := strconv.Atoi(numStr)
if err != nil {
return 0
}
return num
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ixgo/utils.git
git@gitee.com:ixgo/utils.git
ixgo
utils
ixUtils
v1.0.3

搜索帮助