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=="
相关推荐
浮灯Foden10 分钟前
算法-每日一题(DAY11)每日温度
开发语言·数据结构·c++·算法·leetcode·面试
里探1 小时前
自定义Django rest_framework中response的示例
后端·python·django
mldong7 小时前
mldong 快速开发框架登录模块设计与实现
java·后端·架构
三体世界7 小时前
HTTPS加密原理
linux·开发语言·网络·c++·网络协议·http·https
我爱Jack8 小时前
@annotation:Spring AOP 的“精准定位器“
java·后端·spring
明月与玄武8 小时前
Python爬虫工作基本流程及urllib模块详解
开发语言·爬虫·python
云空8 小时前
《NuGet:.NET开发的魔法包管理器》
开发语言·.net
我崽不熬夜8 小时前
为什么你该立即学习 Java 的 Lambda 表达式?
java·后端·java ee
小怡同学..8 小时前
c++系列之智能指针的使用
开发语言·c++