问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Go语言程序编译注入版本信息,提升Debug速度!

发布网友 发布时间:2小时前

我来回答

1个回答

热心网友 时间:2小时前

为了提升Debug速度并进行版本追踪,通常做法是在Go程序编译时注入版本标志、编译时间、当前分支、当前Tag、当前提交号等信息。这使得Go程序在运行时可以打印出编译时的参数情况。具体实现方法如下:

在使用`go build`命令时,可以结合`-ldflags`参数来实现注入信息。`golang`项目常用三个参数:`-s`和`-w`用于减小构建二进制包的大小,`CGO_ENABLED=0`用于禁用`cgo`。

`-X 'main.BuildVersion=${build_version}'`参数在编译时会向`main`中注册变量`BuildVersion`,在`main.go`代码中接受该变量。编译后,程序运行时会显示编译时的参数情况。

`Makefile`为项目定义编译规则,简化编译过程。早期主要用于C/C++工程的编译,现在广泛应用于其他项目,使得使用`make`命令自动编译项目,无需手动执行编译命令。因此,可将`go build`命令整合至`Makefile`中。

`Makefile`结构包括变量定义、显式规则、隐晦规则、文件指示和注释。通过编写`Makefile`,可以自动化构建流程。

实践步骤如下:获取仓库的tag、最近提交的commit id、当前所处分支。在Go项目根目录下创建`Makefile`文件,编写相关规则,如`make linux`即可生成二进制服务。编译后运行结果与使用`go build`一致。

总之,通过`Makefile`与`-ldflags`结合注入服务版本信息,是一种常见且有效的方式,有助于快速定位问题,避免一些常见错误。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在爱水APP哪个模块中可以填写个人信息,查询自己一天的饮水量? 黄金为什么是避险产品 避险买什么 避险品种是什么 避险产品什么意思 什么是避险产品 ...对联和我们平时使用的印章,说说使用了哪几个字体 对联上写的是什么字 ...有一空是让我评价我自己,请各位哥哥姐姐帮帮忙,帮我编一段,往好了... 艾灸用品哪种好 GHOST对拷硬盘,高手进! 新买的硬盘 用Ghost分区对分区克隆数据时会出现以下问题么? 逸动蓝鲸版1.4t真实油耗是多少 苹果iPhone 5C屏幕图案在哪? 森源河南森源电气集团 西夏区西夏区-主要产业 西夏区西夏区-城市建设 厦门社保卡补办要多久? 宜宾十大最好玩的景点 宜宾好玩的地方排行榜 宜宾哪里好耍 给推荐一下宜宾好玩的地方,我想去宜宾旅游了~ 宜宾有什么好玩的地方大神们帮帮忙 站票坐火车行李有一个行李箱挺重的,我是女生,拿不到行李架上箱子大概高... 17图库应用商店怎么没有了? 17APP怎么在apple store找不到了 17APP被下架了吗 我的qq好吗4开头算不算带4呀不好吗 云顶之弈新手入门详细攻略 云顶之弈怎么玩才能吃鸡 云顶之弈新手怎么玩 韩国衣服选择淘宝代购怎么样啊? 有什么韩国代购淘宝店铺推荐? - 知乎 【Golang源码分析】Golang如何实现自举(一) 彻底解决Golang获取当前项目绝对路径问题 怎么对容器中的 Golang 程序打断点Debug? 缩减Golang编译后文件大小的三种方法 golang包管理之vendor 经常吃夜宵会长胖吗 吃夜宵可以长胖吗 皮鞋太大了怎么办? 鞋松爱掉怎么办 怎么样抢红包更快 怎样抢红包最快最多 泉州户口如何迁入厦门?我想在厦门买房落户,没在 厦门呆过!我有个孩子... 辟邪平时戴什么好辟邪平时戴啥好 无法证明资金来源可以定罪吗 强制开通微粒贷可信吗?是真的吗? iphone7手机如何分屏多任务? 抖音蹦蹦蹦那个什么歌抖音蹦蹦蹦蹦蹦英文歌是什么 去深圳红树林哪个地铁出口 青岛市黄岛区红树林珊瑚在哪个地铁站 自己做饭要买哪些东西