Application à la génération automatique de versioning
Est-il possible d'incrémenter un numéro de version mineure automatiquement à chaque fois un Aller application est compilée?
Je voudrais mettre un numéro de version à l'intérieur de mon programme, avec un autoincrementing section:
$ myapp -version
MyApp version 0.5.132
Être de 0,5 le numéro de version j'ai mis, et 132 une valeur qui s'incrémente automatiquement à chaque fois que le binaire est compilé.
Est-ce possible en matière de Go?
Vous devez vous connecter pour publier un commentaire.
La Aller de l'éditeur de liens (allez outil de lien) dispose d'une option pour définir la valeur d'un non initialisée variable de type string:
valeur.
Notez qu'avant d'Aller 1.5, cette option a eu deux arguments.
Maintenant, il prend un argument de split sur le premier signe=.
Dans le cadre de votre processus de création, vous pouvez créer une version variable de chaîne à l'aide de ce. Vous pouvez passer ce par le biais de la
go
outil à l'aide de-ldflags
. Par exemple, pour le fichier source suivant:Alors:
Afin de mettre en
main.minversion
à l'accumulation de la date et de l'heure lors de la construction:Si vous compilez sans l'initialiser
main.minversion
de cette façon, il va contenir la chaîne de caractères vide.go bouild
au lieu dego run
?go build -ldflags "-X main.minversion `date -u +.%Y%m%d%.H%M%S`" service.go
$ go run -ldflags "-X main.xyz abc" main.go
->go run: no go files listed
go build -ldflags "-X main.minversion \"%date%\""
. Cela ne fonctionne pas sur LiteIDE bien.go build service.go
marcherait aussi bien.go build -ldflags "-X 'main.buildtime=$(date -u '+%Y-%m-%d %H:%M:%S')'"
go build -ldflags "-X pkg.version=123"
ne fonctionne pas alors quego build -ldflags "-X path/to/pkg.version=123"
fonctionner comme prévu. espérons que cela aide.J'ai eu du mal à l'aide de la
-ldflags
paramètre lors de la création de mon mélangé de la ligne de commande de l'app et de la bibliothèque de projet, j'ai donc fini par utiliser un Makefile cible pour générer un Aller fichier source contenant mon application version et la date de compilation:Dans mon
init()
méthode, je fais ceci:Si vous vouliez une atomiquement l'augmentation de numéro de build au lieu d'une date de création, cependant, vous aurez probablement besoin de créer un fichier local qui contient le dernier numéro de build. Votre Makefile de lire le contenu du fichier dans une variable, l'incrémenter, de l'insérer dans le
version.go
fichier au lieu de la date, et d'écrire le nouveau numéro de version dans le fichier.En outre, je tiens à poster un petit exemple de comment utiliser git et un makefile:
Le fichier de créer allons créer deux fichiers exécutables. Est en cours d'exécution de la fonction de l'un, l'autre prend la fonction de deux comme entrée principale:
Alors il suffit d'exécuter:
Vous obtiendrez:
à l'utilisation de plusieurs
-ldflags
:Sur Windows OS donné le programme ci-dessous
Vous pouvez créer en utilisant
Format de Date suppose que votre environnement
echo %date%
estFri 07/22/2016
etecho %time%
est16:21:52.88
Alors la sortie sera:
version=0.0.1, date=2016-07-22T16:21:52
Utilisation
ldflags
de définir des variables dansmain
package:Avec fichier
main.go
:Puis exécutez:
Construire:
Utilisation
ldflags
pour définir une variable dans un non-main
package:Avec fichier
config.go
:Vous aurez également besoin de fichier
main.go
:Construire votre binaire première:
Trouver le chemin d'accès complet du nom de la variable que vous souhaitez définir:
Construire les binaires à nouveau, mais avec la
ldflags
:Inspiré par https://github.com/golang/go/wiki/GcToolchainTricks#including-build-information-in-the-executable
Aussi, si vous êtes en utilisant
goreleaser
alors lisez cette https://goreleaser.com/#using-the-main-version: