我需要在Go应用程序生成的输出中提供一个版本号。 对于发布和本地构建,我使用 Makefile,它具有:
...
VERSION = $(shell git describe --tags)
VER = $(shell git describe --tags --abbrev=0)
DATE = $(shell date -u '+%Y-%m-%d_%H:%M:%S%Z')
...
FLAGS_LD=-ldflags "-X path/to/myapp/mypkg.Build=${DATE}
-X path/to/myapp/mypkg.Version=${VERSION}"
...
GOCMD = go
GOBUILD = $(GOCMD) build $(FLAGS_LD)
GOINSTALL = $(GOCMD) install $(FLAGS_LD)
...
在包中,我有变量作为
package mypkg
var (
Version = "v0.11.0-dev"
Build string
)
当我通过make运行构建,安装或发布时,一切都很好,但是如果我运行go get path/to/myapp
然后-ldflags
为空,用户获得过时的版本信息,并且 没有构建信息。
有没有办法在安装带有go get
的程序时获取正确的ldflags数据?
不,下载源时无法读取/写入 ldflags
go get
旨在从源代码安装。
有没有办法在使用 go get 安装程序时获取正确的 ldflags 数据?
目前的答复是否定的。
是的,您可以为用户提供包的版本
实现您想要做的事情的最简单方法是:
-
如果要共享的是lib(可重用代码(,请将 git 标记添加到源存储库,以便开发用户可以将其用于包版本管理。(glide, go.mod, dep, ...(.
-
如果要共享的是程序(仅用于编译和执行(,请在每次发布新版本时修改
Version
的值。您可以通过结合使用git-hooks
和sed
非常轻松地自动执行此操作。
在使用 go get 安装程序时,有没有办法获取正确的 ldflags 数据?
不。