-X ldflag的调试问题

马克·伯尼尔:

我有一个像这样的程序:

package main

import "fmt"

var version string

func main() {
    fmt.Printf("Version %s\n", version)
}

我想改变的价值版本在编译时,这表现在这里,所以我建立它以这种方式(wtf.go在src / WTF):

go build -ldflags "-X wtf/main.version=1.0.0.1234" wtf
go install wtf

但是当我运行时,version是一个空字符串。

我已经尝试过各种版本的大小写,包名称和路径的不同变体。似乎go build并不能非常有效地验证包/变量名,因为假冒的包/变量名显然不会产生错误。

有没有办法找出要修改的变量,以便对此进行故障排除?

我正在使用适用于Windows / amd64的Go v 1.10.3。

icza:

错误是您必须通过导入路径指定软件包,而不是文件夹的相对文件src夹。因此只需引用version变量即可main.version有关详细信息,请参阅Golang build中如何使用-ldflags -X设置软件包变量

因此,导航至%GOPATH%/src/wtf,并使用以下命令进行构建:

go build -ldflags "-X main.version=1.0.0.1234" wtf.go

(或者,如果文件src/wtf夹中没有带有其他软件包的源文件,则可以省略源文件名。)

它将放置wtf.exe在当前文件夹中。运行它将打印:

Version 1.0.0.1234

请注意,这go install不是必需的。这将构建您的应用,并将可执行二进制文件放入中%GOPATH%/bin,但没有version设置!

如果要使用go install,则必须再次提供标志。%GOPATH%/src/wtf文件夹中运行以下命令

go install -ldflags "-X main.version=1.0.0.1234"

还要注意,go install不要求您运行go build之前,你并不需要跑go installgo build有关详细信息,请参阅构建什么版本?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章