以下是一个简单的例子,希望它能够阐明并帮助你轻松地完成:
为您的应用程序创建一个目录:
$ mkdir app && cd app
创建一个子目录
config
:
$ mkdir config
请添加以下文件,它应该位于app/config/vars.go
下:
package config
var Version string
var BuildTime string
//todo: can add as many as build vars
在根目录下的
app/
中添加主要包
main.go
:
package main
import (
"fmt"
"app/config"
)
func main() {
fmt.Println("build.Version:\t", Version)
fmt.Println("build.Time:\t", build.BuildTime)
}
现在是构建的时候了:
go build -ldflags "-X 'app/config.Version=0.0.1' -X 'app/config.BuildTime=$(date)'"
构建完成后,您现在可以运行该应用程序:
$ ./app
Version: 0.0.1
build.Time: Sat Jul 4 19:49:19 UTC 2020
最后,你可能需要探索一下那些你没有编写的特定应用程序在ldflags
中提供了什么,你可以使用随go tool
一起提供的nm
来列出所有ldflags
。
只需构建应用程序,然后使用go tool nm
列出所有链接器标志。
$ go build -o app
$ go tool nm ./app
还有任何问题或需要更多澄清的地方吗?请在下方留言,我会尽快回复您。
example.com/module
的子目录config
将是example.com/module/config
,您可以使用-X example.com/module/config.Version=1.0.0
(似乎只有最后一个.
决定了importpath
和name
之间的分隔符)。 - kbolino-X
的文档已经更新,并添加了一个额外的警告:“仅当变量在源代码中声明为未初始化或初始化为常量字符串表达式时,此选项才有效。如果初始值设定项调用函数或引用其他变量,则-X
将无效。” - kbolino