golang为Go二进制文件轻松添加版本信息的构建插件govvv的使用

govvv - 为Go二进制文件轻松添加版本信息的构建插件

概述

govvv是一个简单的Go二进制版本管理工具,它封装了go build命令,让你无需手动处理繁琐的-ldflags参数。

⚠️ 注意:该项目已不再维护,因为Go现在已原生支持build info

govvv演示动画

安装

go get github.com/ahmetb/govvv

构建变量

govvv支持以下构建变量:

变量 描述 示例
main.GitCommit 源代码树的短提交哈希 0b5ed7a
main.GitBranch 代码构建时所在的分支名 master
main.GitState 是否有未提交的更改 cleandirty
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

版本管理示例

  1. 在项目根目录创建VERSION文件
  2. 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

基本使用

  1. 首先,在你的项目根目录创建version文件(或使用-version参数指定版本):
echo "1.0.0" > version
  1. 使用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

优势

  1. 无需修改构建流程 - 只需将go build替换为govvv build
  2. 保持代码整洁 - 不需要在代码中硬编码版本信息
  3. 支持多种版本信息 - 包括Git相关信息
  4. 简单易用 - 几乎零配置

govvv是管理Go应用程序版本信息的轻量级解决方案,特别适合需要频繁部署和版本控制的应用程序。

回到顶部