Golang编译时修改变量值

场景 #

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

代码 #

main包变量 #

package main

import "fmt"

var version string

func main() {
	fmt.Println(version)
}

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

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

其它包变量 #

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

package main

import (
    "fmt"
    "csz.net/goForward/conf"
)

func main() {
	fmt.Println(conf.Version)
}

编译时修改则为

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

搭配Github Action使用 #

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

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

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