golang为Go二进制文件轻松添加版本信息的构建插件govvv的使用
govvv - 为Go二进制文件轻松添加版本信息的构建插件
概述
govvv是一个简单的Go二进制版本管理工具,它封装了go build
命令,让你无需手动处理繁琐的-ldflags
参数。
⚠️ 注意:该项目已不再维护,因为Go现在已原生支持build info。
安装
go get github.com/ahmetb/govvv
构建变量
govvv支持以下构建变量:
变量 | 描述 | 示例 |
---|---|---|
main.GitCommit |
源代码树的短提交哈希 | 0b5ed7a |
main.GitBranch |
代码构建时所在的分支名 | master |
main.GitState |
是否有未提交的更改 | clean 或 dirty |
main.GitSummary |
git describe --tags --dirty --always 的输出 |
v1.0.0 , v1.0.1-5-g585c78f-dirty , fbd157c |
main.BuildDate |
RFC3339格式的UTC日期 | 2016-08-04T18:07:54Z |
main.Version |
./VERSION 文件的内容,或通过-version 选项传递的值 |
2.0.0 |
使用方法
只需将你想要的构建变量添加到main
包中,然后运行:
旧命令 | ✨ 新命令 ✨ |
---|---|
go build |
govvv build |
go install |
govvv install |
版本管理示例
- 在项目根目录创建
VERSION
文件 - 在
main
包中添加Version
变量
自定义LDFLAGS
你可以保留现有的-ldflags
参数,govvv会将它的-ldflags
附加到你的标志后面:
govvv build -ldflags "-X main.BuildNumber=$buildnum" myapp
其他用法
仅打印构建命令而不执行
govvv build -print
获取govvv准备的LDFLAGS
go build -ldflags="$(govvv -flags)"
使用不同的包
# 使用govvv构建
govvv build -pkg github.com/myacct/myproj/mypkg
# 使用go构建
go build -ldflags="$(govvv -flags -pkg $(go list ./mypkg))"
指定自定义版本
# 使用govvv构建
govvv build -version 1.2.3
# 使用go构建
go build -ldflags="$(govvv -flags -version 1.2.3)"
完整示例
package main
import "fmt"
// 定义版本变量
var (
GitCommit string
GitBranch string
GitState string
GitSummary string
BuildDate string
Version string
)
func main() {
fmt.Printf("Version: %s\n", Version)
fmt.Printf("Git commit: %s\n", GitCommit)
fmt.Printf("Git branch: %s\n", GitBranch)
fmt.Printf("Git state: %s\n", GitState)
fmt.Printf("Git summary:%s\n", GitSummary)
fmt.Printf("Build date: %s\n", BuildDate)
}
构建命令:
govvv build -o myapp
注意事项
虽然govvv是一个方便的工具,但考虑到它已不再维护,建议迁移到Go原生支持的构建信息功能。
更多关于golang为Go二进制文件轻松添加版本信息的构建插件govvv的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang为Go二进制文件轻松添加版本信息的构建插件govvv的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用govvv为Go二进制文件添加版本信息
govvv是一个简单易用的Go构建工具,可以在编译时自动将版本信息嵌入到Go二进制文件中,而无需修改源代码。下面我将详细介绍govvv的使用方法。
安装govvv
go install github.com/ahmetb/govvv@latest
基本使用
- 首先,在你的项目根目录创建
version
文件(或使用-version
参数指定版本):
echo "1.0.0" > version
- 使用govvv替代
go build
命令:
govvv build -o myapp
支持的版本信息
govvv支持嵌入以下信息到二进制文件中:
Version
- 版本号BuildDate
- 构建时间GitCommit
- Git提交哈希GitBranch
- Git分支GitState
- Git状态(clean或dirty)GitSummary
- Git摘要
高级用法
自定义版本信息
govvv build -o myapp -version 1.2.3 -pkg main
在代码中访问版本信息
package main
import (
"fmt"
)
var (
Version string
BuildDate string
GitCommit string
GitBranch string
GitState string
GitSummary string
)
func main() {
fmt.Printf("Version: %s\n", Version)
fmt.Printf("BuildDate: %s\n", BuildDate)
fmt.Printf("GitCommit: %s\n", GitCommit)
fmt.Printf("GitBranch: %s\n", GitBranch)
fmt.Printf("GitState: %s\n", GitState)
fmt.Printf("GitSummary: %s\n", GitSummary)
}
与go install一起使用
govvv install
与go run一起使用
govvv run main.go
在Makefile中使用
VERSION := $(shell cat version 2>/dev/null || echo "0.0.0-dev")
build:
govvv build -o myapp -version $(VERSION)
install:
govvv install -version $(VERSION)
实际应用示例
下面是一个完整的示例,展示如何在真实项目中使用govvv:
package main
import (
"flag"
"fmt"
"os"
)
var (
versionFlag = flag.Bool("version", false, "显示版本信息")
// 这些变量将在编译时由govvv注入
Version = "unset"
BuildDate = "unset"
GitCommit = "unset"
GitBranch = "unset"
GitState = "unset"
GitSummary = "unset"
)
func main() {
flag.Parse()
if *versionFlag {
printVersion()
os.Exit(0)
}
fmt.Println("应用程序正常运行...")
}
func printVersion() {
fmt.Printf("版本: %s\n", Version)
fmt.Printf("构建时间: %s\n", BuildDate)
fmt.Printf("Git提交: %s\n", GitCommit)
fmt.Printf("Git分支: %s\n", GitBranch)
fmt.Printf("Git状态: %s\n", GitState)
fmt.Printf("Git摘要: %s\n", GitSummary)
}
编译命令:
govvv build -o myapp -pkg main
运行查看版本信息:
./myapp -version
优势
- 无需修改构建流程 - 只需将
go build
替换为govvv build
- 保持代码整洁 - 不需要在代码中硬编码版本信息
- 支持多种版本信息 - 包括Git相关信息
- 简单易用 - 几乎零配置
govvv是管理Go应用程序版本信息的轻量级解决方案,特别适合需要频繁部署和版本控制的应用程序。