【发布时间】:2016-05-21 13:50:00
【问题描述】:
受this SO question 的启发,我想使用相同的机制在我的 golang 应用程序中嵌入版本号。但是我正在使用Cobra 命令行解析器并希望有一个version 子命令。这导致以下目录和包结构:
.
|-- cmd
`-- version.go
|-- main.go
到目前为止,我已经尝试了以下方法:
go run -ldflags "-X cmd/version.versionString=0.1.0" main.go version
-
go run -ldflags "-X version.versionString=0.1.0" main.go version
-
go run -ldflags "-X version.VersionString=0.1.0" main.go version
version.go 包含如下变量声明:
var versionString string
和
var VersionString string
分别。
我也尝试将变量声明放在 main.go 中,但我不清楚如何为我尝试的这个选项引用 version.go 中的变量:
import "github.com/basbossink/psiw"
....
fmt.Println(psiw.VersionString)
-
import "github.com/basbossink/psiw/main"
...
fmt.Println(main.VersionString)
在这两种情况下,编译器都会抱怨 psiw 和 main 分别是未知的。
请注意,在 main 中使用 VersionString 会得到预期的结果。
我更喜欢链接标志指向version 包中的变量的解决方案,因为它们不需要后向指针。但欢迎提出任何建议。
【问题讨论】:
标签: go version auto-versioning