我有一个这样的程序:package mainimport "fmt"var version stringfunc main() { fmt.Printf("Version %s\n", version)}我想在编译时更改版本的值,如此处所示,所以我以这种方式构建它(wtf.go 在 src/wtf 中):go build -ldflags "-X wtf/main.version=1.0.0.1234" wtfgo install wtf但是当我运行时,版本是一个空字符串。我尝试了各种版本的外壳,包名称和路径的不同变体。似乎go build并没有太多地验证包/变量名,因为显然伪造的不会产生错误。有没有办法找出 go 试图修改的变量,以便解决这个问题?我正在为 Windows/amd64 使用 Go v 1.10.3。
1 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
错误是你必须通过导入路径指定包,而不是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
,但不会有设置version
!
如果要使用go install
,则必须再次提供标志。在文件夹中运行以下命令%GOPATH%/src/wtf
:
go install -ldflags "-X main.version=1.0.0.1234"
另请注意,go install
不需要您go build
先运行,也不需要go install
先运行go build
。
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消