yanghui
2021-05-14 2604d2075715ec3ecd11c526d86b75ee8947f2ec
version compare
1个文件已修改
55 ■■■■■ 已修改文件
version.go 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
version.go
@@ -4,7 +4,10 @@
    "encoding/json"
    "flag"
    "fmt"
    "math"
    "os"
    "strconv"
    "strings"
)
var (
@@ -35,3 +38,55 @@
        }
    }
}
func VersionCode2Name(version int64) (string, error) {
    if version < 0 {
        return "", errors.New("Version can't be negetive")
    }
    majorVersion := version >> 32
    minorVersion := (version >> 16) & 0xffff
    buildNumber := version & 0xffff
    name := fmt.Sprintf("%d.%d.%d", majorVersion, minorVersion, buildNumber)
    return name, nil
}
func VersionName2Code(version string) (int64, error) {
    subVersions := strings.Split(version, ".")
    if len(subVersions) != 3 {
        return 0, errors.New("Incorrect version format, version formats like 1.12.3")
    }
    majorVersion, err := strconv.ParseInt(subVersions[0], 10, 64)
    if nil != err {
        return 0, errors.New(version + " major part can't be parsed, version formats like 1.12.3")
    }
    minorVersion, err := strconv.ParseInt(subVersions[1], 10, 64)
    if nil != err {
        return 0, errors.New(version + " minor part can't be parsed, version formats like 1.12.3")
    }
    buildNumber, err := strconv.ParseInt(subVersions[2], 10, 64)
    if nil != err {
        return 0, errors.New(version + " build number part can't be parsed, version formats like 1.12.3")
    }
    if majorVersion > math.MaxUint16 {
        return 0, errors.New(version + " major version too large, max value is:" + strconv.Itoa(math.MaxUint16))
    }
    if minorVersion > math.MaxUint16 {
        return 0, errors.New(version + " minor version too large, max value is:" + strconv.Itoa(math.MaxUint16))
    }
    if buildNumber > math.MaxUint16 {
        return 0, errors.New(version + " build number too large, max value is:" + strconv.Itoa(math.MaxUint16))
    }
    num := (majorVersion << 32) | (minorVersion << 16) | buildNumber
    return num, nil
}