56 lines
973 B
Go
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
|
|
}
|