为了账号安全,请及时绑定邮箱和手机立即绑定

使用 -X ldflag 调试问题

使用 -X ldflag 调试问题

Go
收到一只叮咚 2023-05-08 15:00:52
我有一个这样的程序:package mainimport "fmt"var version stringfunc main() {    fmt.Printf("Version %s\n", version)}我想在编译时更改版本的值,如此处所示,所以我以这种方式构建它(wtf.go 在 src/wtf 中):go build -ldflags "-X wtf/main.version=1.0.0.1234" wtfgo install wtf但是当我运行时,版本是一个空字符串。我尝试了各种版本的外壳,包名称和路径的不同变体。似乎go build并没有太多地验证包/变量名,因为显然伪造的不会产生错误。有没有办法找出 go 试图修改的变量,以便解决这个问题?我正在为 Windows/amd64 使用 Go v 1.10.3。
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

错误是你必须通过导入路径指定包,而不是src文件夹的相对文件夹。所以简单地引用你的version变量,比如main.version

所以导航到%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 install先运行go build


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信