我想向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/bin
. go install
不使用之前由go build
. 如果您想在您的 中指定版本值go build
,您应该分发生成的二进制文件,而不是鼓励用户使用go install
.
或者,您可以ldflags
在go install
命令中指定,但这对于最终用户来说可能非常麻烦 - 他们不会足够关心让它输出正确的版本字符串来打扰更长的命令。
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报
0/150
提交
取消