go build时通过-ldflags打入版本信息
Go 通过 build 版本信息 打入
2023-06-13 09:13:13 时间
阅读grafana源码时发现日志会打印版本信息,但代码里的版本是7.5.0而不是1.8.3,这里是怎么做到的呢?
查看Makefile和build.go文件,发现一种在二进制打入版本信息的好办法。
一般情况下,我们做二进制包,版本号一般是放到代码或者version.txt文件里。放到代码里的最简单,直接打印,但每次发版需要修改这里的版本号。放version.txt里的需要实现读version.txt的逻辑,然后打印。来看下grafana是怎么做的:
grafana的版本号是放到前端package.json文件里的,相当于前端和后台只有一个地方维护版本号,后台在编译时,通过go build -ldflags -X 注入版本号信息
go build -ldflags "-w -X main.version=8.1.3 -X main.commit=unknown-dev -X main.buildstamp=1631418042 -X main.buildBranch=main" -o ./bin/linux-amd64/grafana-server ./pkg/cmd/grafana-server
即-X main.version=8.1.3,这里的main.version指main包的version变量,相当于是给main包的version变量赋值8.1.3,这样main包就可以直接输出version了
// main.go
package main
import (
"fmt"
)
var version = "1.7.5"
func main() {
fmt.Printf("version:%s\n", version)
}
go build -ldflags "-X main.version=1.8.3" main.go
// 1.8.3
相关文章
- go富集分析和kegg富集分析的区别_非模式生物怎么做GO富集
- 照猫画虎把SpringBoot搬到K8s,居然翻船咧,体验到了Go在云原生的两个优势
- 2022-10-02:以下go语言代码能否通过编译?A: 能;B: 不能;C: 不知道。package mainimport (
- Go 面向对象编程篇(四):类属性和成员方法的可见性
- Go 数据结构和算法篇(七):归并排序
- 国产ETL etl-engine 可视化 轻量级 跨平台 支持动态解析GO语言脚本
- 「Go工具箱」通过这个工具包,你就能了解每天使用的表情符号是怎么来的
- 2023-04-15:ffmpeg的filter_audio.c的功能是生成一个正弦波音频,然后通过简单的滤镜链,最后输出数据的MD5校验和。请用go语言改写。
- Go-循环语句-break
- Go Mutex:保护并发访问共享资源的利器
- Go语言闭包(Closure)——引用了外部变量的匿名函数
- go pprof命令(Go语言性能分析命令)完全攻略
- Go语言session的创建和管理
- 为什么我们从 Docker 转向了 Go?
- Go语言环境配置:在 Linux 下实现(go环境搭建linux)
- SQL Server和Go组合,助力数据库计算更高效(sqlserver加go)
- MySQL中使用Go语言的好处(mysql中go什么)
- 提升Go读取Oracle的速度(go读取oracle速度)
- 数据库Go语言实现监控Oracle数据库(go监听oracle)