场景
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