场景

golang在编译时,修改指定包内变量的值,常用于输出版本信息。

代码

main包变量

1package main
2
3import "fmt"
4
5var version string
6
7func main() {
8	fmt.Println(version)
9}

编译时修改变量version的值为123

1go build -ldflags "-X main.version=123" main.go

其它包变量

如果需要修改子包变量或其它包变量,则需要带上import中的地址,即引用地址 如

 1package main
 2
 3import (
 4    "fmt"
 5    "csz.net/goForward/conf"
 6)
 7
 8func main() {
 9	fmt.Println(conf.Version)
10}

编译时修改则为

1go build -ldflags "-X csz.net/goForward/conf.Version=123"

搭配Github Action使用

在编译时,可以设置tags为版本号

1go build -ldflags "-X main.version=${GITHUB_REF/refs\/tags\//}" -o main.go

其中${GITHUB_REF/refs\/tags\//}代表当前Github Action的tags