我正在使用Go 1.9.2创建一个应用程序,我正在尝试在构建期间使用pm.test("Body matches string", function ()
{
pm.expect(pm.response.text()).to.not.include("string_you_want_to_search");
});
选项向其添加版本字符串变量。
我已设法使用ldflags -X
在我的Version
包中设置main
变量,但我真正需要的是设置-ldflags "-X main.Version=1.0.0"
变量在我的Version
包中,而不是config
包中。这可能吗?
这是我的构建命令:
main
答案 0 :(得分:17)
引自Command link的文件:
-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
包。但是,您必须指定完整的导入路径,而不仅仅是包名称。
E.g。如果您的config
包位于$GOPATH/src/my/package/config
,请使用以下命令:
go build -ldflags "-X my/package/config.Version=1.0.0" -o $(MY_BIN) $(MY_SRC)
答案 1 :(得分:1)
这是一个简单的示例,希望它可以阐明并帮助您轻松实现:
为您的应用程序创建目录:
$ 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
中编写的特定应用程序提供了哪些功能,您可以使用nm
随附的go tool
进行列出全部ldflags
。
只需构建应用,然后使用go tool nm
列出所有链接器标志。
$ go build -o app
$ go tool nm ./app
还有什么问题或需要进一步澄清的吗?请随时在下面发表评论,我们会尽快与您联系。