Files
timerx/priority/version.go
T
2025-09-14 22:44:11 +08:00

56 lines
973 B
Go

package priority
import (
"errors"
"math"
"strconv"
"strings"
)
var (
ErrVersionFormat = errors.New("version format error")
)
// 版本号转策略等级
func PriorityByVersion(version string) (priority int64, err error) {
// 版本不能为空
if version == "" {
return 0, ErrVersionFormat
}
// 除掉版本号中的v或V
if version[0] == 'v' || version[0] == 'V' {
version = version[1:]
}
// 用点号切割
vs := strings.Split(version, ".")
// 最多只支持5位
if len(vs) > 5 {
return 0, ErrVersionFormat
}
// base 16位
var baseNum float64 = 0
// 每一位转成数字&每一位不能大于999
for key, val := range vs {
if val == "" {
return 0, ErrVersionFormat
}
i, err := strconv.ParseInt(val, 10, 64)
if err != nil {
return 0, ErrVersionFormat
}
if i < 0 || i > 999 {
return 0, ErrVersionFormat
}
p := (4 - key) * 3
num := math.Pow10(p) * float64(i)
baseNum += num
}
return int64(baseNum), nil
}