登录
首页 >  Golang >  Go问答

使用 -X ldflag 进行调试问题

来源:stackoverflow

时间:2024-04-11 23:33:32 294浏览 收藏

大家好,今天本人给大家带来文章《使用 -X ldflag 进行调试问题》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我有一个这样的 go 程序:

package main

import "fmt"

var version string

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

我想在编译时更改 version 的值,如此处所示,因此我以这种方式构建它(wtf.go 在 src/wtf 中):

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

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

我尝试了版本的各种大小写、包名称和路径的不同变体。似乎 go build 并没有太多地验证包/变量名称,因为显然伪造的名称不会生成错误。

有没有办法可以找出 go 正在尝试修改的变量,以便我可以解决此问题?

我正在使用适用于 windows/amd64 的 go v 1.10.3。


解决方案


错误在于您必须通过导入路径指定包,而不是 src 文件夹的相对文件夹。因此,只需引用您的 version 变量,例如 main.version 即可。详情请见How to set package variable using -ldflags -X in Golang build

因此导航到 %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 build 之后运行 go install。详情见What does go build build?

到这里,我们也就讲完了《使用 -X ldflag 进行调试问题》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>