代码拉取完成,页面将自动刷新
/*
* @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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。