From 6d17695dc30dac8050a5f541f20964f1448faf2b Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期一, 01 十一月 2021 11:38:57 +0800
Subject: [PATCH] flag.Parse must be called after all flags defined

---
 version.go |   65 ++++++++++++++++++++++++++------
 1 files changed, 53 insertions(+), 12 deletions(-)

diff --git a/version.go b/version.go
index 84b00eb..5a28e5f 100644
--- a/version.go
+++ b/version.go
@@ -2,6 +2,7 @@
 
 import (
 	"encoding/json"
+	"errors"
 	"flag"
 	"fmt"
 	"math"
@@ -10,18 +11,25 @@
 	"strings"
 )
 
+type (
+	VaVersion int64
+)
+
 var (
 	BuildVersion string
 	BuildTime    string
 	CommitSha1   string
 	AppName      string
+
+	ShowVer 	 bool
 )
 
 func init() {
-	var showVer bool
-	flag.BoolVar(&showVer, "v", false, "display build version")
-	flag.Parse()
-	if showVer {
+	flag.BoolVar(&ShowVer, "vbasic", false, "display build version")
+}
+
+func Usage() {
+	if ShowVer {
 		info := make(map[string]interface{})
 		info["version"] = BuildVersion
 		info["build"] = BuildTime
@@ -39,21 +47,54 @@
 	}
 }
 
-func VersionCode2Name(version int64) (string, error) {
-	if version < 0 {
-		return "", errors.New("Version can't be negetive")
+func (v VaVersion) Valid() bool {
+	if v < 0 {
+		return false
 	}
 
-	majorVersion := version >> 32
-	minorVersion := (version >> 16) & 0xffff
-	buildNumber := version & 0xffff
+	majorVersion := v >> 32
+	if majorVersion > math.MaxUint16 {
+		return false
+	}
+
+	return true
+}
+
+func (v VaVersion) Compare(v1 VaVersion) (int, error) {
+	if !v.Valid() {
+		return 0, errors.New("Invalid VaVersion left value")
+	}
+
+	if !v1.Valid() {
+		return 0, errors.New("Invalid VaVersion right value")
+	}
+
+	if v > v1 {
+		return 1, nil
+	}
+
+	if v < v1 {
+		return -1, nil
+	}
+
+	return 0, nil
+}
+
+func (v VaVersion) String() (string, error) {
+	if !v.Valid() {
+		return "", errors.New("Invalid VaVersion value")
+	}
+
+	majorVersion := (v >> 32) & 0xffff
+	minorVersion := (v >> 16) & 0xffff
+	buildNumber := v & 0xffff
 
 	name := fmt.Sprintf("%d.%d.%d", majorVersion, minorVersion, buildNumber)
 
 	return name, nil
 }
 
-func VersionName2Code(version string) (int64, error) {
+func VersionName2VaVersion(version string) (VaVersion, error) {
 	subVersions := strings.Split(version, ".")
 	if len(subVersions) != 3 {
 		return 0, errors.New("Incorrect version format, version formats like 1.12.3")
@@ -88,5 +129,5 @@
 
 	num := (majorVersion << 32) | (minorVersion << 16) | buildNumber
 
-	return num, nil
+	return VaVersion(num), nil
 }

--
Gitblit v1.8.0