Der Go-Linker ( Go-Tool-Link ) bietet eine Option zum Festlegen des Werts einer nicht initialisierten Zeichenfolgenvariablen:
-X importpath.name=value
Set the value of the string variable in importpath named name to
Wert. Beachten Sie, dass diese Option vor Go 1.5 zwei separate Argumente hatte. Jetzt wird ein Argument auf das erste = Zeichen aufgeteilt.
Als Teil Ihres Erstellungsprozesses können Sie damit eine Versionszeichenfolgenvariable festlegen. Sie können dies mit dem go
Tool durchlaufen -ldflags
. Zum Beispiel bei folgender Quelldatei:
package main
import "fmt"
var xyz string
func main() {
fmt.Println(xyz)
}
Dann:
$ go run -ldflags "-X main.xyz=abc" main.go
abc
Um main.minversion
das Erstellungsdatum und die Erstellungszeit beim Erstellen festzulegen:
go build -ldflags "-X main.minversion=`date -u +.%Y%m%d.%H%M%S`" service.go
Wenn Sie kompilieren, ohne main.minversion
auf diese Weise zu initialisieren , enthält es die leere Zeichenfolge.
go bouild
anstelle von verwendego 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"
funktioniert nicht während dergo build -ldflags "-X path/to/pkg.version=123"
Arbeit wie erwartet. ich hoffe es hilft.Zusätzlich möchte ich ein kleines Beispiel für die Verwendung von Git und einem Makefile veröffentlichen:
Die make-Datei erstellt zwei ausführbare Dateien. Einer führt Funktion eins aus, der andere übernimmt Funktion zwei als Haupteintrag:
Dann laufen Sie einfach:
Sie erhalten:
quelle
-ldflags
Beim Erstellen meiner gemischten Befehlszeilen-App und meines Bibliotheksprojekts hatte ich Probleme mit der Verwendung des Parameters. Daher habe ich ein Makefile-Ziel verwendet, um eine Go-Quelldatei zu generieren, die die Version meiner App und das Erstellungsdatum enthält:In meiner
init()
Methode mache ich das:Wenn Sie jedoch eine atomar ansteigende Build-Nummer anstelle eines Build-Datums wünschen, müssen Sie wahrscheinlich eine lokale Datei erstellen, die die letzte Build-Nummer enthält. Ihr Makefile liest den Dateiinhalt in eine Variable, erhöht ihn, fügt ihn
version.go
anstelle des Datums in die Datei ein und schreibt die neue Build-Nummer zurück in die Datei.quelle
Verwenden Sie
ldflags
diese Option , um Variablen immain
Paket festzulegen:Mit Datei
main.go
:Dann renne:
Bauen:
Verwenden Sie
ldflags
diese Option , um eine Variable in einemnon-main
Paket festzulegen:Mit Datei
config.go
:Sie benötigen außerdem eine Datei
main.go
:Erstellen Sie zuerst Ihre Binärdatei:
Suchen Sie den vollständigen Pfad des Variablennamens, den Sie festlegen möchten:
Führen Sie die Binärdatei aus und erstellen Sie sie erneut, jedoch mit
ldflags
:Inspiriert von https://github.com/golang/go/wiki/GcToolchainTricks#including-build-information-in-the-executable
Auch wenn Sie verwenden,
goreleaser
lesen Sie diese https://goreleaser.com/#using-the-main-version :Wenn Sie dies in Aktion sehen möchten: https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go
quelle
Multi verwenden
-ldflags
:quelle
Unter Windows das unten stehende Programm
Sie können mit bauen
Das Datumsformat setzt voraus, dass Ihre Umgebung
echo %date%
istFri 07/22/2016
undecho %time%
ist16:21:52.88
Dann wird die Ausgabe sein:
version=0.0.1, date=2016-07-22T16:21:52
quelle