feat: super 包新增 OldVersion 和 CompareVersion 函数用于版本比较
This commit is contained in:
parent
c6b929afe8
commit
23d223508b
|
@ -0,0 +1,57 @@
|
|||
package super
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// OldVersion 检查 version2 对于 version1 来说是不是旧版本
|
||||
func OldVersion(version1, version2 string) bool {
|
||||
return CompareVersion(version1, version2) == 1
|
||||
}
|
||||
|
||||
// CompareVersion 返回一个整数,用于表示两个版本号的比较结果:
|
||||
// - 如果 version1 大于 version2,它将返回 1
|
||||
// - 如果 version1 小于 version2,它将返回 -1
|
||||
// - 如果 version1 和 version2 相等,它将返回 0
|
||||
func CompareVersion(version1, version2 string) int {
|
||||
reg, _ := regexp.Compile("[^0-9.]+")
|
||||
processedVersion1 := processVersion(reg.ReplaceAllString(version1, ""))
|
||||
processedVersion2 := processVersion(reg.ReplaceAllString(version2, ""))
|
||||
|
||||
n, m := len(processedVersion1), len(processedVersion2)
|
||||
i, j := 0, 0
|
||||
for i < n || j < m {
|
||||
x := 0
|
||||
for ; i < n && processedVersion1[i] != '.'; i++ {
|
||||
x = x*10 + int(processedVersion1[i]-'0')
|
||||
}
|
||||
i++ // skip the dot
|
||||
y := 0
|
||||
for ; j < m && processedVersion2[j] != '.'; j++ {
|
||||
y = y*10 + int(processedVersion2[j]-'0')
|
||||
}
|
||||
j++ // skip the dot
|
||||
if x > y {
|
||||
return 1
|
||||
}
|
||||
if x < y {
|
||||
return -1
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func processVersion(version string) string {
|
||||
// 移除首尾可能存在的非数字字符
|
||||
reg, _ := regexp.Compile("^[^.0-9]+|[^.0-9]+$")
|
||||
version = reg.ReplaceAllString(version, "")
|
||||
// 确保不出现连续的点
|
||||
version = strings.ReplaceAll(version, "..", ".")
|
||||
// 移除每一部分起始的 0
|
||||
versionParts := strings.Split(version, ".")
|
||||
for idx, part := range versionParts {
|
||||
versionParts[idx] = strings.TrimLeft(part, "0")
|
||||
}
|
||||
return strings.Join(versionParts, ".")
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package super_test
|
||||
|
||||
import (
|
||||
"github.com/kercylan98/minotaur/utils/super"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCompareVersion(t *testing.T) {
|
||||
t.Log(super.CompareVersion("1", "2"), -1)
|
||||
t.Log(super.CompareVersion("1", "vv2"), -1)
|
||||
t.Log(super.CompareVersion("1", "vv2.3.1"), -1)
|
||||
t.Log(super.CompareVersion("11", "vv2.3.1"), 1)
|
||||
}
|
Loading…
Reference in New Issue