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=="
相关推荐
Lei活在当下18 分钟前
【业务场景架构实战】6. 从业务痛点到通用能力:Android 优先级分页加载器设计
前端·后端·架构
千里马-horse18 分钟前
Async++ 源码分析3---cancel.h
开发语言·c++·async++·cancel
你的人类朋友22 分钟前
什么是基础设施中间件
前端·后端
K_i1342 小时前
指针步长:C/C++内存操控的核心法则
java·开发语言
渡我白衣2 小时前
C++ :std::bind 还能用吗?它和 Lambda 有什么区别?
开发语言·c++·c++20
胖咕噜的稞达鸭2 小时前
算法入门:专题攻克主题一---双指针(1)移动零 复写零
c语言·开发语言·c++·算法
郝学胜-神的一滴2 小时前
Effective Python 第38条:简单的接口应该接受函数,而不是类的实例
开发语言·python·软件工程
一只小bit2 小时前
CMake 入门实战手册:从理解原理开始,打造高效 C/C++ 开发流程
c语言·开发语言·c++·cmake
secondyoung2 小时前
Markdown转换为Word:Pandoc模板使用指南
开发语言·经验分享·笔记·c#·编辑器·word·markdown
lly2024062 小时前
Django ORM - 聚合查询
开发语言