Utilisez ldflags
pour définir des variables dans main
paquet :
Avec dossier main.go
:
package main
import "fmt"
var (
version string
build string
)
func main() {
fmt.Println("version=", version)
fmt.Println("build=", build)
}
Alors cours :
go run \
-ldflags "-X main.version=1.0.0 -X main.build=12082019" \
main.go
Construire :
go build -o mybinary \
-ldflags "-X main.version=1.0.0 -X 'main.build=$(date)'" \
main.go
Utilisez ldflags
pour définir une variable dans un non-main
paquet :
Avec dossier config.go
:
package config
import "fmt"
var (
Version string
)
func LogVersion() {
fmt.Println("version=", Version)
}
Vous aurez également besoin du fichier main.go
:
package main
import (
"fmt"
"github.com/user/repo/config"
}
func main() {
config.LogVersion()
}
Construisez d'abord votre binaire :
go build -o mybinary main.go
Trouvez le chemin complet du nom de la variable que vous voulez définir :
go tool nm <path_to_binary> | grep Version
Exécutez et construisez à nouveau le binaire mais avec l'option ldflags
:
go run \
-ldflags "-X github.com/user/repo/config.Version=1.0.0" \
main.go --version
go build -o mybinary \
-ldflags "-X github.com/user/repo/config.Version=1.0.0" \
main.go
Inspiré par https://github.com/golang/go/wiki/GcToolchainTricks#including-build-information-in-the-executable
De même, si vous utilisez goreleaser
alors lisez ceci https://goreleaser.com/environment/#using-the-mainversion :
Par défaut, GoReleaser définit trois ldflags :
main.version : Balise Git actuelle
main.commit : Git commit actuel SHA
main.date : Date selon RFC3339
Si vous voulez voir ça en action : https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go