Dans le prolongement des autres réponses, avec les versions récentes de go, il est également possible d'écrire un buildid dans une section ELF - bien que cela ne soit pas aussi facilement lisible depuis le programme.
J'écris la même valeur dans les deux, en utilisant quelque chose comme ce qui suit :
BuildInfo:= "BUILD #x, branch @ rev built yymmdd hh:mm:ss"
// note the nested quotes "''" required to get a string with
// spaces passed correctly to the underlying tool
ldFl := fmt.Sprintf("-X 'main.buildId=%s' -s -w '-buildid=%s'", BuildInfo, BuildInfo)
args := []string{
"build",
"-ldflags", ldFl,
"-trimpath",
"-gcflags", "-dwarf=false",
}
buildpath:="path/to/my/cmd"
args=append(args,buildpath)
buildCmd:=exec.Command("go", args...)
Je l'utilise avec mage
un outil de construction écrit en go. Vous n'avez pas besoin des drapeaux supplémentaires ci-dessus, mais je les ai choisis pour enlever autant d'informations que possible des binaires de sortie.
(hors sujet : Mage demande un peu plus de travail initial que quelque chose comme Make, mais est beaucoup plus facile à étendre/maintenir qu'un système de construction basé sur make - de plus, vous n'avez pas à changer de vitesse mentale entre go et une autre syntaxe).