我可以在执行"go get path/to/myapp"时获得正确的版本和构建信息吗?



我需要在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 数据?

目前的答复是否定的。

是的,您可以为用户提供包的版本

实现您想要做的事情的最简单方法是:

  1. 如果要共享的是lib(可重用代码(,请将 git 标记添加到源存储库,以便开发用户可以将其用于包版本管理。(glide, go.mod, dep, ...(.

  2. 如果要共享的是程序(仅用于编译和执行(,请在每次发布新版本时修改Version的值。您可以通过结合使用git-hookssed非常轻松地自动执行此操作。

在使用 go get 安装程序时,有没有办法获取正确的 ldflags 数据?

不。

最新更新