不同的链接行为取决于go二进制文件的运行方式
我想将一个不同的链接行为取决于go二进制文件的运行方式,go,Go,我想将一个cobra命令添加到我的gocli工具中,该工具只打印版本 var version=“开发” //versionCmd打印我的工具版本 var versionCmd=&cobra.Command{ 使用:“版本”, 简短:“打印我的工具版本信息”, 符文:func(cmd*cobra.Command,args[]字符串)错误{ fmt.Println(“我的工具版本”,版本) 归零 }, } 我可以使用ldflags ▶ go build ▶ ./mytool version my
cobra
命令添加到我的go
cli工具中,该工具只打印版本
var version=“开发”
//versionCmd打印我的工具版本
var versionCmd=&cobra.Command{
使用:“版本”,
简短:“打印我的工具版本信息”,
符文:func(cmd*cobra.Command,args[]字符串)错误{
fmt.Println(“我的工具版本”,版本)
归零
},
}
我可以使用ldflags
▶ go build
▶ ./mytool version
mytool version development
▶ go build -ldflags "-X github.com/myprofile/mytool/cmd.version=$(git describe --tags --always)"
▶ ./mytool version
mytool version cffc487
但是,当执行go install
时,行为会发生变化,我似乎无法覆盖version
var,这是为什么
▶ go build -ldflags "-X github.com/myprofile/mytool/cmd.version=$(git describe --tags --always)"
▶ go install
▶ ~/go/bin/mytool version
mytool version development
使用
您的
go build
创建一个二进制文件并保存它。您的go-install
创建一个新的二进制文件并将其保存到GOPATH/bin
go-install
不使用以前由go-build
创建的二进制文件。如果要在go-build
中指定版本值,则应分发生成的二进制文件,而不是鼓励用户使用go-install
或者,您可以在
go install
命令中指定ldflags
,但对于最终用户来说,这可能相当麻烦-他们不会太在意让它输出正确的版本字符串来处理更长的命令。您在go install
期间没有设置-ldflags
,因此它没有设置。
▶ go version
go version go1.14 darwin/amd64