Posted on

How to make a Go program print its own version

Since version 1.12 Go includes runtime/debug.BuildInfo type which represents build information read from the running binary.

package main

import (
	"flag"
	"fmt"
	"runtime/debug"
)

func main() {
	var v bool
	flag.BoolVar(&v, "v", false, "show version and exit")
	flag.Parse()
	if v {
		version := "unknown"
		if info, ok := debug.ReadBuildInfo(); ok {
			version = info.Main.Version
		}
		fmt.Println("version:", version)
		return
	}
	fmt.Println("running program")
}