Go allows you to override global variables at build time during the linker stage:
$ go build -o /tmp/prog-custom -ldflags "-X main.overrideableValuePhrase=123456" ./cmd/prog
Requirements:
- It must be a global variable and not a constant.
- It might be in the package that you are telling it to build. This definitely works for executables and, with the removal of support for binary-only packages (BOPs), it probably doesn’t apply whatsoever to intermediate packages.
- It must be a string (so, process it from the
init()
function).
It doesn’t matter whether it is an exported or unexported symbol.