我有一个像这样的程序:
package main
import "fmt"
var version string
func main() {
fmt.Printf("Version %s\n", version)
}
我想改变的价值版本在编译时,这表现在这里,所以我建立它以这种方式(wtf.go在src / WTF):
go build -ldflags "-X wtf/main.version=1.0.0.1234" wtf
go install wtf
但是当我运行时,version是一个空字符串。
我已经尝试过各种版本的大小写,包名称和路径的不同变体。似乎go build并不能非常有效地验证包/变量名,因为假冒的包/变量名显然不会产生错误。
有没有办法找出要修改的变量,以便对此进行故障排除?
我正在使用适用于Windows / amd64的Go v 1.10.3。
错误是您必须通过导入路径指定软件包,而不是文件夹的相对文件src
夹。因此只需引用version
变量即可main.version
。有关详细信息,请参阅Golang build中如何使用-ldflags -X设置软件包变量。
因此,导航至%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
。有关详细信息,请参阅构建什么版本?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句