Golang compile environment variable into binary

Ainer-G's answer led me to the right place, but it wasn't a full code sample answering the question. A couple of changes were required:

  1. Declare the version as var version string
  2. Compile with -X main.version=$VERSION

Here's the full code:

package main

import (
    "fmt"
)

var version string

func main() {
    fmt.Println(version)
}

Now compile with

go build -ldflags "-X main.version=$VERSION"

Go 1.5 and above edit:

As of now, the syntax has changed.

On Unix use:

go build -ldflags "-X main.Version=$VERSION"

On Windows use:

go build -ldflags "-X main.Version=%VERSION%"

This is what -X linker flag is for. In your case, you would do

go build -ldflags "-X main.Version $VERSION"

Edit: on Windows this would be

go build -ldflags "-X main.Version %VERSION%"

More info in the linker docs.

Tags:

Go