我正在使用Go 1.9.2创建一个应用程序,我正在尝试使用ldflags -X构建期间的选项向其添加版本字符串变量.
我已经设法通过使用:Version在我的main包中设置一个变量-ldflags "-X main.Version=1.0.0",但是我真正需要的是Version在我的config包中设置变量而不是main一个.这可能吗?
这是我的构建命令:
go build -ldflags "-X config.Version=1.0.0" -o $(MY_BIN) $(MY_SRC)
icz*_*cza 28
-X importpath.name=value
Set the value of the string variable in importpath named name to value.
Note that before Go 1.5 this option took two separate arguments.
Now it takes one argument split on the first = sign.
因此它可以用于任何包,而不仅仅是main包.但是您必须指定完整的导入路径,而不仅仅是包名称.
例如,如果您的config包位于$GOPATH/src/my/package/config,则使用以下命令:
go build -ldflags "-X my/package/config.Version=1.0.0" -o $(MY_BIN) $(MY_SRC)
Run Code Online (Sandbox Code Playgroud)
mat*_*007 22
添加您的(未初始化的字符串)变量,构建您的二进制文件,然后执行
\ngo tool nm <your binary> | grep <your variable>\nRun Code Online (Sandbox Code Playgroud)\n它会显示类似的内容
\n101aa3820 B <import path>/config.Version\nRun Code Online (Sandbox Code Playgroud)\n那\xe2\x80\x99是你\xe2\x80\x99正在寻找的导入路径,要在其中设置
\ngo build -ldflags "-X <import path>/config.Version=1.0.0" -o $(MY_BIN) $(MY_SRC)\nRun Code Online (Sandbox Code Playgroud)\n
Muh*_*man 16
这是一个简单的例子,希望它能澄清并帮助如何轻松地做到这一点:
为您的应用程序创建一个目录:
$ mkdir app && cd app
Run Code Online (Sandbox Code Playgroud)
创建一个子目录config:
$ mkdir config
Run Code Online (Sandbox Code Playgroud)
添加以下文件。它应该位于app/config/vars.go:
package config
var Version string
var BuildTime string
//todo: can add as many as build vars
Run Code Online (Sandbox Code Playgroud)
在根目录中app/,添加主包main.go:
package main
import (
"fmt"
"app/config"
)
func main() {
fmt.Println("build.Version:\t", Version)
fmt.Println("build.Time:\t", build.BuildTime)
}
Run Code Online (Sandbox Code Playgroud)
现在是时候构建了:
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
Run Code Online (Sandbox Code Playgroud)
最后,您有时可能需要探索您没有自己编写代码的特定应用程序提供了什么ldflags,您可以通过使用附带的列表来完成nm此go tool操作ldflags。
只需构建应用程序,然后用于go tool nm列出所有链接器标志。
$ go build -o app
$ go tool nm ./app
Run Code Online (Sandbox Code Playgroud)
还有任何问题或需要进一步澄清吗?请随时在下面发表评论,我会尽快回复您。
| 归档时间: |
|
| 查看次数: |
8682 次 |
| 最近记录: |