为了账号安全,请及时绑定邮箱和手机立即绑定

不同的链接行为取决于 go 二进制文件的运行方式

不同的链接行为取决于 go 二进制文件的运行方式

Go
慕侠2389804 2022-05-18 16:45:34
我想向cobra我的gocli 工具添加一个仅打印版本的命令var version = "development"// versionCmd prints mytool versionvar versionCmd = &cobra.Command{    Use:   "version",    Short: "Print mytool version information",    RunE: func(cmd *cobra.Command, args []string) error {        fmt.Println("mytool version", version)        return nil    },}我可以覆盖(或选择不这样做)version变量使用ldflags▶ go build▶ ./mytool versionmytool version development▶ go build -ldflags "-X github.com/myprofile/mytool/cmd.version=$(git describe --tags --always)"▶ ./mytool version                                                                             mytool version cffc487但是,在执行go install行为更改时,我似乎无法覆盖versionvar,这是为什么呢?▶ go build -ldflags "-X github.com/myprofile/mytool/cmd.version=$(git describe --tags --always)"▶ go install                                                                                  ▶ ~/go/bin/mytool version                                                                      mytool version development使用▶ go versiongo version go1.14 darwin/amd64
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

go build创建一个二进制文件并保存它。您go install 创建了一个新的二进制文件并将其保存到 GOPATH/bingo install不使用之前由go build. 如果您想在您的 中指定版本值go build,您应该分发生成的二进制文件,而不是鼓励用户使用go install.

或者,您可以ldflagsgo install命令中指定,但这对于最终用户来说可能非常麻烦 - 他们不会足够关心让它输出正确的版本字符串来打扰更长的命令。


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信