mirror of
https://github.com/unti-io/go-utils.git
synced 2025-09-27 04:36:22 +08:00
57 lines
1.0 KiB
Go
57 lines
1.0 KiB
Go
package utils
|
||
|
||
import (
|
||
"regexp"
|
||
"runtime"
|
||
"strconv"
|
||
"strings"
|
||
|
||
"github.com/spf13/cast"
|
||
)
|
||
|
||
// Version - 版本
|
||
var Version *VersionClass
|
||
|
||
type VersionClass struct{}
|
||
|
||
// Go - 获取当前go版本号
|
||
func (this *VersionClass) Go() (result string) {
|
||
return strings.Replace(runtime.Version(), "go", "", -1)
|
||
}
|
||
|
||
// Compare - 版本号比对
|
||
/**
|
||
* @param v1 string - 小版本号
|
||
* @param v2 string - 大版本号
|
||
* @return int - 0: 相等,1: v1 < v2,-1: v1 > v2
|
||
* @example:
|
||
* utils.Version.Compare("1.2.0", "1.0.0") // 1
|
||
*/
|
||
func (this *VersionClass) Compare(v1, v2 any) (result int) {
|
||
|
||
rule := regexp.MustCompile(`\d+`)
|
||
v1Arr := rule.FindAllString(cast.ToString(v1), -1)
|
||
v2Arr := rule.FindAllString(cast.ToString(v2), -1)
|
||
|
||
for i := 0; i < len(v1Arr) || i < len(v2Arr); i++ {
|
||
v1Num := 0
|
||
v2Num := 0
|
||
|
||
if i < len(v1Arr) {
|
||
v1Num, _ = strconv.Atoi(v1Arr[i])
|
||
}
|
||
|
||
if i < len(v2Arr) {
|
||
v2Num, _ = strconv.Atoi(v2Arr[i])
|
||
}
|
||
|
||
if v2Num > v1Num {
|
||
return 1
|
||
} else if v2Num < v1Num {
|
||
return -1
|
||
}
|
||
}
|
||
|
||
return 0
|
||
}
|