Go 使用-X ldflag调试问题
我有这样一个围棋程序:Go 使用-X ldflag调试问题,go,Go,我有这样一个围棋程序: package main import "fmt" var version string func main() { fmt.Printf("Version %s\n", version) } 我想在编译时更改version的值,如所示,因此我以这种方式构建它(wtf.go在src/wtf中): 但当我运行时,version是一个空字符串 我尝试了版本的各种外壳,包名和路径的不同变体。看起来,go build并没有很好地验证包/变量名,因为显然虚假的包/变
package main
import "fmt"
var version string
func main() {
fmt.Printf("Version %s\n", version)
}
我想在编译时更改version的值,如所示,因此我以这种方式构建它(wtf.go在src/wtf中):
但当我运行时,version是一个空字符串
我尝试了版本的各种外壳,包名和路径的不同变体。看起来,go build并没有很好地验证包/变量名,因为显然虚假的包/变量名不会产生错误
是否有办法找出go试图修改的变量,以便对此进行故障排除
我使用的是适用于Windows/amd64的Go v 1.10.3。错误在于您必须通过导入路径指定包,而不是相对于
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
,但不会设置版本
如果要使用转到安装
,则必须再次提供标志。在%GOPATH%/src/wtf
文件夹中运行以下命令:
go install -ldflags "-X main.version=1.0.0.1234"
还请注意,
go-install
不要求您在之前运行go-build
,也不需要在go-build
之后运行go-install
。有关详细信息,请参见您是否尝试过在导入路径中不使用“wtf/”前缀的情况下构建?e、 g.go build-ldflags“-X main.version=1.0.0.1234”wtf
@ssemilla,这是我尝试的第一件事。导航到该位置似乎有效!实际上,我正试图使用Go插件从VS代码中执行此操作,因此我想我需要弄清楚如何将这些信息输入到Go.buildFlags配置设置中。
go install -ldflags "-X main.version=1.0.0.1234"