L'éditeur de liens Go ( lien de l'outil go ) a une option pour définir la valeur d'une variable de chaîne non initialisée:
-X importpath.name=value
Set the value of the string variable in importpath named name to
valeur. Notez qu'avant Go 1.5, cette option prenait deux arguments distincts. Maintenant, il faut un argument divisé sur le premier signe =.
Dans le cadre de votre processus de construction, vous pouvez définir une variable de chaîne de version à l'aide de this. Vous pouvez le transmettre via l' go
outil en utilisant -ldflags
. Par exemple, étant donné le fichier source suivant:
package main
import "fmt"
var xyz string
func main() {
fmt.Println(xyz)
}
Ensuite:
$ go run -ldflags "-X main.xyz=abc" main.go
abc
Afin de définir main.minversion
la date et l'heure de construction lors de la construction:
go build -ldflags "-X main.minversion=`date -u +.%Y%m%d.%H%M%S`" service.go
Si vous compilez sans initialiser main.minversion
de cette manière, il contiendra la chaîne vide.
go bouild
place dego run
?go build -ldflags "-X main.minversion `date -u +.%Y%m%d%.H%M%S`" service.go
go build -ldflags "-X 'main.buildtime=$(date -u '+%Y-%m-%d %H:%M:%S')'"
go build -ldflags "-X pkg.version=123"
ne fonctionnera pas tant qu'ilgo build -ldflags "-X path/to/pkg.version=123"
fonctionnera comme prévu. J'espère que ça aide.De plus, je voudrais publier un petit exemple d'utilisation de git et d'un makefile:
Le fichier make créera deux exécutables. L'un exécute la fonction un, l'autre prendra la fonction deux comme entrée principale:
Ensuite, lancez simplement:
Tu auras:
la source
J'ai eu du mal à utiliser le
-ldflags
paramètre lors de la construction de mon projet d'application et de bibliothèque de ligne de commande mixte, alors j'ai fini par utiliser une cible Makefile pour générer un fichier source Go contenant la version de mon application et la date de construction:Dans ma
init()
méthode, je fais ceci:Si vous vouliez un numéro de build à augmentation atomique au lieu d'une date de build, cependant, vous auriez probablement besoin de créer un fichier local contenant le dernier numéro de build. Votre Makefile lit le contenu du fichier dans une variable, l'incrémente, l'insère dans le
version.go
fichier au lieu de la date, et écrit le nouveau numéro de version dans le fichier.la source
Utilisez
ldflags
pour définir des variables dans lemain
package:Avec dossier
main.go
:Puis exécutez:
Construire:
Utilisez
ldflags
pour définir une variable dans unnon-main
package:Avec dossier
config.go
:Vous aurez également besoin d'un fichier
main.go
:Construisez d'abord votre binaire:
Trouvez le chemin complet du nom de la variable que vous souhaitez définir:
Exécutez et compilez à nouveau le binaire mais avec le
ldflags
:Inspiré par https://github.com/golang/go/wiki/GcToolchainTricks#including-build-information-in-the-executable
Aussi si vous utilisez,
goreleaser
lisez ceci https://goreleaser.com/#using-the-main-version :Si vous voulez voir cela en action: https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go
la source
pour utiliser multi
-ldflags
:la source
Sous Windows OS étant donné le programme ci-dessous
Vous pouvez construire en utilisant
Le format de date suppose que votre environnement
echo %date%
estFri 07/22/2016
etecho %time%
est16:21:52.88
Ensuite, la sortie sera:
version=0.0.1, date=2016-07-22T16:21:52
la source