浏览代码

更新命令行参数处理和版本信息显示

修改了tiger和lion模块中命令行参数解析的退出方式,使用更安静的退出方法。同时,在命令行参数导出打印功能中增加了构建时间、编译器等更多信息的显示,并支持了短选项前缀。此外,调整了随机字符串生成脚本以仅包含小写字母和数字。
SongZihuan 2 周之前
父节点
当前提交
8b16e14c8a

+ 1 - 1
get_random.ps1

@@ -1,4 +1,4 @@
-$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
+$characters = 'abcdefghijklmnopqrstuvwxyz0123456789'
 $length = 40
 
 $randomString = -join (1..$length | ForEach-Object { $characters[(Get-Random -Maximum $characters.Length)] })

+ 1 - 1
get_random.sh

@@ -1,3 +1,3 @@
 length=40
-randomString=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $length | head -n 1)
+randomString=$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w $length | head -n 1)
 echo "$randomString" > random_data.txt

+ 15 - 1
src/commandlineargs/export_printer.go

@@ -11,6 +11,9 @@ import (
 	"github.com/SongZihuan/BackendServerTemplate/src/utils/formatutils"
 	"github.com/SongZihuan/BackendServerTemplate/src/utils/osutils"
 	"io"
+	"runtime"
+	"strings"
+	"time"
 )
 
 func (d *CommandLineArgsDataType) FprintUsage(writer io.Writer) (int, error) {
@@ -22,7 +25,18 @@ func (d *CommandLineArgsDataType) PrintUsage() (int, error) {
 }
 
 func (d *CommandLineArgsDataType) FprintVersion(writer io.Writer) (int, error) {
-	version := formatutils.FormatTextToWidth(fmt.Sprintf("Version of %s: %s", osutils.GetArgs0Name(), global.SemanticVersioning), formatutils.NormalConsoleWidth)
+	res := new(strings.Builder)
+	res.WriteString(fmt.Sprintf("Version of %s: %s\n", osutils.GetArgs0Name(), global.Version))
+	res.WriteString(fmt.Sprintf("Build Date (UTC): %s\n", global.BuildTime.In(time.UTC).Format(time.DateTime)))
+	if time.Local != nil && time.Local.String() != time.UTC.String() {
+		zone, _ := time.Now().Local().Zone()
+		res.WriteString(fmt.Sprintf("Build Date (%s): %s\n", zone, global.BuildTime.In(time.Local).Format(time.DateTime)))
+	}
+	res.WriteString(fmt.Sprintf("Compiler: %s\n", runtime.Version()))
+	res.WriteString(fmt.Sprintf("OS: %s\n", runtime.GOOS))
+	res.WriteString(fmt.Sprintf("Arch: %s\n", runtime.GOARCH))
+
+	version := formatutils.FormatTextToWidth(res.String(), formatutils.NormalConsoleWidth)
 	return fmt.Fprintf(writer, "%s\n", version)
 }
 

+ 6 - 5
src/commandlineargs/internal_data_type_method.go

@@ -12,6 +12,7 @@ import (
 
 const OptionIdent = "  "
 const OptionPrefix = "--"
+const OptionShortPrefix = "-"
 const UsagePrefixWidth = 10
 
 func (d *CommandLineArgsDataType) ready() {
@@ -97,7 +98,7 @@ func (d *CommandLineArgsDataType) writeUsage() {
 			}
 
 			if optionShortName != "" {
-				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionPrefix, formatutils.FormatTextToWidth(optionShortName, formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
+				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionShortPrefix, formatutils.FormatTextToWidth(optionShortName, formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
 			}
 		} else if field.Type.Kind() == reflect.String {
 			var optionData string
@@ -116,9 +117,9 @@ func (d *CommandLineArgsDataType) writeUsage() {
 			}
 
 			if optionShortName != "" && optionData != "" {
-				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionPrefix, formatutils.FormatTextToWidth(fmt.Sprintf("%s string, default: '%s'", optionShortName, optionData), formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
+				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionShortPrefix, formatutils.FormatTextToWidth(fmt.Sprintf("%s string, default: '%s'", optionShortName, optionData), formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
 			} else if optionShortName != "" && optionData == "" {
-				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionPrefix, formatutils.FormatTextToWidth(fmt.Sprintf("%s string", optionShortName), formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
+				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionShortPrefix, formatutils.FormatTextToWidth(fmt.Sprintf("%s string", optionShortName), formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
 			}
 		} else if field.Type.Kind() == reflect.Uint || field.Type.Kind() == reflect.Int {
 			var optionData uint
@@ -137,9 +138,9 @@ func (d *CommandLineArgsDataType) writeUsage() {
 			}
 
 			if optionShortName != "" && optionData != 0 {
-				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionPrefix, formatutils.FormatTextToWidth(fmt.Sprintf("%s number, default: %d", optionShortName, optionData), formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
+				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionShortPrefix, formatutils.FormatTextToWidth(fmt.Sprintf("%s number, default: %d", optionShortName, optionData), formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
 			} else if optionShortName != "" && optionData == 0 {
-				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionPrefix, formatutils.FormatTextToWidth(fmt.Sprintf("%s number", optionShortName), formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
+				title2 = fmt.Sprintf("%s%s%s", OptionIdent, OptionShortPrefix, formatutils.FormatTextToWidth(fmt.Sprintf("%s number", optionShortName), formatutils.NormalConsoleWidth-len(OptionIdent)-len(OptionPrefix)))
 			}
 		} else {
 			panic(fmt.Sprintf("the flag type (%s) is not support", field.Type.Name()))

+ 4 - 2
src/global/variabl.go

@@ -10,7 +10,7 @@ import (
 )
 
 var (
-	// Version SemanticVersioning License Report 继承自resource
+	// Version SemanticVersioning License Report BuildTime GitCommitHash GitTag GitTagCommitHash 继承自resource(程序init完成后即可调用)
 	Version            = resource.Version
 	SemanticVersioning = resource.SemanticVersioning
 	License            = resource.License
@@ -20,10 +20,12 @@ var (
 	GitTag             = resource.GitTag
 	GitTagCommitHash   = resource.GitTagCommitHash
 
-	// Name 当config读取配置文件加载时可能会被更改
+	// Name 继承自resource(程序init完成后即可调用)
+	// 注意:命令行参数或配置文件加载时可能会被更改
 	Name = resource.Name
 )
 
+// Location 以下变量需要在配置文件加载完毕后才可调用
 var (
 	Location *time.Location
 )

+ 1 - 1
src/mainfunc/lion/v1/main.go

@@ -31,7 +31,7 @@ func MainV1() (exitCode int) {
 	err = commandlineargs.InitCommandLineArgsParser(nil)
 	if err != nil {
 		if errors.Is(err, commandlineargs.StopRun) {
-			return exitutils.SuccessExit("server not run")
+			return exitutils.SuccessExitQuite()
 		}
 
 		return exitutils.InitFailedError("Command Line Args Parser", err.Error())

+ 1 - 1
src/mainfunc/tiger/v1/main.go

@@ -29,7 +29,7 @@ func MainV1() (exitCode int) {
 	err = commandlineargs.InitCommandLineArgsParser(nil)
 	if err != nil {
 		if errors.Is(err, commandlineargs.StopRun) {
-			return exitutils.SuccessExit("server not run")
+			return exitutils.SuccessExitQuite()
 		}
 
 		return exitutils.InitFailedError("Command Line Args Parser", err.Error())

+ 11 - 0
src/utils/exitutils/exit.go

@@ -98,3 +98,14 @@ func SuccessExit(reason string, exitCode ...int) int {
 
 	return ec
 }
+
+func SuccessExitQuite(exitCode ...int) int {
+	if !logger.IsReady() {
+		panic("Logger must be ready!!!")
+		return exitCodeErrorLogMustBeReady
+	}
+
+	ec := getExitCode(0, exitCode...)
+
+	return ec
+}