// Package runtimeinfo implements the private runtime version state used by the // public buildinfo facade. package runtimeinfo import ( "runtime/debug" "sync" ) var injectedVersion string // Version returns the injected version or the running executable's main module // version, falling back to "dev" when neither provides a release identifier. func Version() string { if injectedVersion != "" { return injectedVersion } return fallbackVersion() } var fallbackVersion = newFallbackVersion(debug.ReadBuildInfo) func newFallbackVersion(readBuildInfo func() (*debug.BuildInfo, bool)) func() string { return sync.OnceValue(func() string { return version("", readBuildInfo) }) } func version(injected string, readBuildInfo func() (*debug.BuildInfo, bool)) string { if injected != "" { return injected } info, ok := readBuildInfo() if ok && info != nil && info.Main.Version != "" && info.Main.Version != "(devel)" { return info.Main.Version } return "dev" }