写 cli
的程序猿们应该都有一个烦恼吧,如何把版本信息写入程序以及最终生成的可执行的二进制文件,达到 cli -v
或 cli --version
就可以显示版本信息的效果呢?
手动写入
或者 使用构建脚本
是我之前一直的做法,但今天我发现了另一个好办法,那就是使用 -ldflags
设置变量值。
手动写入
这种方式我就不多说了,就是每次构建发布之前手动把版本号等信息写入配置文件或代码中,非常容易遗忘或出错!
使用构建脚本
一般我的项目里都会有一个 Makefile
文件,通过 make
可以帮我们整合构建、测试等操作需要的步骤,之后只需要使用 make build
或 make test
就可以进行构建或测试了,下面是简单的一个 Makefile
:
1 | Makefile复制代码.PHONY build test |
这时,我会在 Makefile
里写下面的内容进行设置版本信息:
1 | Makefile复制代码VERSION = $(shell git tag --sort=committerdate | tail -n 1) |
pkg/cmd/version.go
里有这么一段代码:
1 | go复制代码const version = "dev" |
-ldflags
上场
-ldflags
可以帮我们设置变量值,我们只需要在 Go 源码文件中定义好变量即可。
比如在 main.go
文件里定义三个版本信息相关的变量:
1 | go复制代码package main |
然后 Makefile
构建脚本这样写:
1 | Makefile复制代码NAME := cli |
这样便可以把我们要的版本信息写进最终生成的二进制文件中,而且不会修改源代码,nice 呀!
本文转载自: 掘金