Inject values into your golang binary at build time
I recently discovered that you can update the value of a string variable inside your golang code via compiler flags. This is very useful for scenarios where you want to set a value based on an external process, but you don't want to let your users change it. We run into that issue recently when we wanted to add a version
command to a binary we were building.
Let's say we something like the program below:
package main
import "fmt"
var version = "0.0.0"
func main() {
fmt.Printf("version %s \n", version)
}
`
If you compile and run this, the output will be:
go build main.go
./main
version 0.0.0
But by using the -ldflags "-X importpath.name=val"
build parameters, you can set the value at build time:
go build -ldflags "-X main.version=1.0.0" main.go
./main
version 1.0.0
You pass the -X
flag several times if you need it (e.g to set version and build time).
Hope it helps!