gpt4 book ai didi

go - 使用 -X ldflag 调试问题

转载 作者:数据小太阳 更新时间:2023-10-29 03:10:17 26 4
gpt4 key购买 nike

我有一个这样的围棋程序:

package main

import "fmt"

var version string

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

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

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

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

我已经尝试了各种版本的外壳,包名称和路径的不同变体。似乎 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 install 之后运行 开始构建。有关详细信息,请参阅 What does go build build?

关于go - 使用 -X ldflag 调试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53193020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com