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"