我想在我的Go二进制文件c2go中添加--version
选项。
我知道传统上这会被硬编码到二进制文件中,但由于它是alpha质量软件并且它经常更新,我想在go get
构建可执行文件时(从git标签)捕获版本。
这可能吗?
答案 0 :(得分:1)
这并不完全回答你的问题,但我解决类似需求的方式如下。
在我的main
包中,我定义了以下变量:
var (
buildInfo string
buildStamp = "No BuildStamp provided"
gitHash = "No GitHash provided"
version = "No Version provided"
)
在我的main
函数中,我执行以下代码:
if buildInfo != "" {
parts := strings.Split(buildInfo, "|")
if len(parts) >= 3 {
buildStamp = parts[0]
gitHash = parts[1]
version = parts[2]
}
}
然后我使用以下bash
(Linux)shell脚本构建我的应用程序:
#!/bin/sh
cd "${0%/*}"
buildInfo="`date -u '+%Y-%m-%dT%TZ'`|`git describe --always --long`|`git tag | tail -1`"
go build -ldflags "-X main.buildInfo=${buildInfo} -s -w" ./cmd/...
您需要调整Windows和MacOS的脚本。
希望有所帮助。
答案 1 :(得分:0)
不,这是不可能的。 (注意,除了git之外,还要支持其他SCM。)