我想在我的Go二进制文件c2go中添加--version选项。

我知道传统上会将其硬编码到二进制文件中,但是由于它是alpha质量软件,并且经常更新,因此我想在go get构建可执行文件(从git标记)时捕获版本。

这可能吗?

最佳答案

这不能完全回答您的问题,但是我解决类似需求的方法如下。

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调整脚本。

希望能有所帮助。

关于git - 是否可以使用 “go get”获得git标签?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43623007/

10-14 15:52