Having the build info directly in a binary is useful in helping to identify one binary from aonther especially if you do a lot of compilations. Manually updating that information in to the source before build is cumbersome and error prone so it's better to automate it.
This can be done in Go using -ldflags with the build command. For example, if you have a main.go file such as this:
package main import "fmt" var( build string ) func main() { fmt.Printf("build date: %v\n", build) )Then you can build it with -ldflags to change the value of build with the current date when using the go build command:
go build -ldflags "-X main.build=`date`" main.go
Be careful that other parts of your program doesn't change the value during runtime since it is just a variable.
To make it a little safer, you can put the variables into another package and don't allow it to be updated. You can, for example, create a package called "buildinfo"
package buildinfo
var (
builddate = "0"
)
func GetBuild() string {
return builddate
}
that is called by your main.go:
package main import ( "fmt" "example/buildinfo" ) func main() { fmt.Printf("build date: %v\n", build.GetBuild()) }
You will then build your application with:
go build -ldflags="-X 'example/buildinfo.builddate=`date`'"
Running the program will now output something like this:
build date: Thu Jan 5 12:33:38 PM
No comments:
Post a Comment