Go工程打包版本号
有些项目,会把版本号写入源码中,每次升级都修改源码号。在 Go 项目中这不是好的处理方式。
一般情况下,可以通过 Git 获得版本信息,可以通过 shell 脚本实现,最后编译 Go 项目时,将版本信息通过 -X
链接参数传递进去:
// main.go
import ("fmt"
)var Version stringfunc main() {fmt.Println("Version:", Version)
}
#!/bin/shversion=""if [ -f "VERSION" ]; thenversion=`cat VERSION`
fiif [[ -z $version ]]; thenif [ -d ".git" ]; thenversion=`shell git symbolic-ref HEAD | cut -b 12-)-$(shell git describe --tags --always --dirty --abbrev=7 2>/dev/null || echo dev`elseversion="unknown"fi
fi
CGO_ENABLED=0 go build -ldflags "-X example.com/main.Version=$version" main.go
# 最终版本号类似于 master-v1.0.4-2-ge5a4ce0-dirty