golang编译时传递参数或注入变量值到程序中

1、使用编译参数-ldflags

可以将参数值赋值到某一个包中的变量

go 复制代码
var version string
fmt.Println("version: " + version)

编译:go build -ldflags="-X 'voteapi/app/health/http/server.version=1.0.0'"

如果你使用了模块(module),请确保导入路径正确,也就是使用完整路径,如果路径不对,它也不会报错。

使用单引号包裹整个 -X 参数可以避免空格问题。

可以赋值多个参数:-X 'main.version=1.0.0' -X 'main.buildTime=2025-06-19'

可以使用环境变量:-X 'main.version=$VERSION' -X 'main.buildTime=$BUILDTIME'

2、go generate指令

生成随机字符串:openssl rand -base64 16

获取git版本号:git describe --tags

最终指令如下

//go:generate sh -c "echo 'package main' > version.go && echo \"var version = \\\"$(openssl rand -base64 16)\\\"\" >> version.go"

需要手动执行go generate,生成的version.go文件

go 复制代码
package main
var version = "0Mh+gzfOKyIMpDB5m8sEsA=="
相关推荐
XH华9 分钟前
C语言第一章数据类型和变量(上)
c语言·开发语言
寻月隐君19 分钟前
用 Rust 实现 HTTPie:一个现代 CLI 工具的构建过程
后端·rust·github
暗影~行星21 分钟前
C语言,结构体指针案例
c语言·开发语言
(Charon)30 分钟前
C语言手写简易 DNS 客户端(接收部分)
c语言·开发语言
ricky_fan35 分钟前
解决bash终端的路径名称乱码问题
开发语言·chrome·vscode·bash
青衫客3641 分钟前
浅谈 Python 中的 yield——生成器对象与函数调用的区别
开发语言·python
sun0077001 小时前
C++实现二叉树左右子树交换算法
开发语言·c++·算法
LaoZhangAI1 小时前
Browser MCP完全指南:5分钟掌握AI浏览器自动化新范式(2025最新)
前端·后端
大葱白菜1 小时前
Java 接口与抽象类:深入解析两者的区别及应用场景
java·后端
Penge6661 小时前
ES 中 mapping 的 true、false、runtime:区别与实践
后端