diff --git a/README.md b/README.md index 8208ad9..4dc4149 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ pkg/ ...... 源码包 |-- assert/ ...... 提供了单元测试时的断言功能,减少一些模板代码 |-- nazastring/ ...... string 和 []byte 相关的操作 |-- consistenthash/ ...... 一致性哈希 - |-- bininfo/ ...... 将编译时的 git commit 日志,时间,Go 编译器信息打入程序中 + |-- bininfo/ ...... 将编译时源码的 git 版本信息(当前 commit log 的 sha 值和 commit message),编译时间,Go 版本,平台打入程序中 |-- bele/ ...... 提供了大小端的转换操作 |-- nazaatomic/ ...... 原子操作 |-- nazajson/ ...... json 操作 @@ -54,9 +54,13 @@ bin/ ...... 可执行文件编译输出目录 #### 项目名 naza 由来 -本仓库主要用于存放我自己写的一些 Go 基础库代码。目前只服务于我的另一个项目: [lal](https:////github.com/q191201771/lal) +本仓库主要用于存放我自己写的一些 Go 基础库代码。目前主要服务于我的另一个项目: [lal](https:////github.com/q191201771/lal) -naza 即哪吒(正确拼音为 nezha,我女儿发音读作 naza,少一个字母,挺好~),希望本仓库以后能像三头六臂,有多种武器的哪吒一样,为我提供多种工具。 +naza 即哪吒(正确拼音为 nezha,我女儿发音读作 naza,少一个字母,挺好~),希望本仓库以后能像三头六臂,有多种武器的哪吒一样,为我提供一个趁手的工具箱。 + +#### 相关文档 + +* pkg/bininfo [给Go程序加入编译版本时间等信息](https://https://pengrl.com/p/37397/) #### 联系我 diff --git a/build.sh b/build.sh index 96d9d22..0438640 100755 --- a/build.sh +++ b/build.sh @@ -2,20 +2,18 @@ set -x -ROOT_DIR=`pwd` - -if [ ! -d ${ROOT_DIR}/bin ]; then - mkdir bin -fi - +# 获取源码最近一次 git commit log,包含 commit sha 值,以及 commit message GitCommitLog=`git log --pretty=oneline -n 1` # 将 log 原始字符串中的单引号替换成双引号 GitCommitLog=${GitCommitLog//\'/\"} - +# 检查源码在git commit 基础上,是否有本地修改,且未提交的内容 GitStatus=`git status -s` +# 获取当前时间 BuildTime=`date +'%Y.%m.%d.%H%M%S'` +# 获取 Go 的版本 BuildGoVersion=`go version` +# 将以上变量序列化至 LDFlags 变量中 LDFlags=" \ -X 'github.com/q191201771/naza/pkg/bininfo.GitCommitLog=${GitCommitLog}' \ -X 'github.com/q191201771/naza/pkg/bininfo.GitStatus=${GitStatus}' \ @@ -23,6 +21,14 @@ LDFlags=" \ -X 'github.com/q191201771/naza/pkg/bininfo.BuildGoVersion=${BuildGoVersion}' \ " +ROOT_DIR=`pwd` + +# 如果可执行程序输出目录不存在,则创建 +if [ ! -d ${ROOT_DIR}/bin ]; then + mkdir bin +fi + +# 编译多个可执行程序 cd ${ROOT_DIR}/demo/add_blog_license && go build -ldflags "$LDFlags" -o ${ROOT_DIR}/bin/add_blog_license && cd ${ROOT_DIR}/demo/add_go_license && go build -ldflags "$LDFlags" -o ${ROOT_DIR}/bin/add_go_license && cd ${ROOT_DIR}/demo/taskpool && go build -ldflags "$LDFlags" -o ${ROOT_DIR}/bin/taskpool && diff --git a/pkg/bininfo/bininfo.go b/pkg/bininfo/bininfo.go index 02501da..a53389f 100644 --- a/pkg/bininfo/bininfo.go +++ b/pkg/bininfo/bininfo.go @@ -6,7 +6,9 @@ // // Author: Chef (191201771@qq.com) -// Package bininfo 将编译时的 git commit 日志,时间,Go 编译器信息打入程序中 +// Package bininfo +// 将编译时源码的 git 版本信息(当前 commit log 的 sha 值和 commit message),编译时间,Go 版本,平台打入程序中 +// 编译时传入这些信息的方式见 naza 的编译脚本: https://github.com/q191201771/naza/blob/master/build.sh package bininfo import ( @@ -15,46 +17,34 @@ import ( "strings" ) -// 编译时通过如下方式传入编译时信息 -// -// GitCommitLog=`git log --pretty=oneline -n 1` -// # 将 log 原始字符串中的单引号替换成双引号 -// GitCommitLog=${GitCommitLog//\'/\"} -// -// GitStatus=`git status -s` -// BuildTime=`date +'%Y.%m.%d.%H%M%S'` -// BuildGoVersion=`go version` -// -// LDFlags=" \ -// -X 'github.com/q191201771/naza/pkg/bininfo.GitCommitLog=${GitCommitLog}' \ -// -X 'github.com/q191201771/naza/pkg/bininfo.GitStatus=${GitStatus}' \ -// -X 'github.com/q191201771/naza/pkg/bininfo.BuildTime=${BuildTime}' \ -// -X 'github.com/q191201771/naza/pkg/bininfo.BuildGoVersion=${BuildGoVersion}' \ -// " -// -// go build -ldflags "$LDFlags" - var ( + // 初始化为 unknown,如果编译时没有传入这些值,则为 unknown GitCommitLog = "unknown" GitStatus = "unknown" BuildTime = "unknown" BuildGoVersion = "unknown" ) +// 返回单行格式 func StringifySingleLine() string { return fmt.Sprintf("GitCommitLog=%s. GitStatus=%s. BuildTime=%s. GoVersion=%s. runtime=%s/%s.", GitCommitLog, GitStatus, BuildTime, BuildGoVersion, runtime.GOOS, runtime.GOARCH) } +// 返回多行格式 func StringifyMultiLine() string { return fmt.Sprintf("GitCommitLog=%s\nGitStatus=%s\nBuildTime=%s\nGoVersion=%s\nruntime=%s/%s\n", GitCommitLog, GitStatus, BuildTime, BuildGoVersion, runtime.GOOS, runtime.GOARCH) } +// 对一些值做美化处理 func beauty() { if GitStatus == "" { + // GitStatus 为空时,说明本地源码与最近的 commit 记录一致,无修改 + // 为它赋一个特殊值 GitStatus = "cleanly" } else { + // 将多行结果合并为一行 GitStatus = strings.Replace(strings.Replace(GitStatus, "\r\n", " |", -1), "\n", " |", -1) } }