Linker Go ( link do narzędzia go ) ma opcję ustawienia wartości niezainicjowanej zmiennej łańcuchowej:
-X importpath.name=value
Set the value of the string variable in importpath named name to
wartość. Zauważ, że przed wersją Go 1.5 ta opcja miała dwa osobne argumenty. Teraz zajmuje jeden argument podzielony na pierwszy znak =.
W ramach procesu kompilacji można przy użyciu tej zmiennej ustawić ciąg znaków wersji. Możesz to przekazać za pomocą go
narzędzia -ldflags
. Na przykład biorąc pod uwagę następujący plik źródłowy:
package main
import "fmt"
var xyz string
func main() {
fmt.Println(xyz)
}
Następnie:
$ go run -ldflags "-X main.xyz=abc" main.go
abc
Aby ustawić main.minversion
datę i godzinę kompilacji podczas budowania:
go build -ldflags "-X main.minversion=`date -u +.%Y%m%d.%H%M%S`" service.go
Jeśli kompilujesz bez inicjowania main.minversion
w ten sposób, będzie zawierać pusty ciąg.
go bouild
zamiast niejgo 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"
nie będzie działać podczasgo build -ldflags "-X path/to/pkg.version=123"
pracy zgodnie z oczekiwaniami. mam nadzieję, że to pomoże.Dodatkowo chciałbym zamieścić mały przykład użycia git i makefile:
Plik make utworzy dwa pliki wykonywalne. Jeden wykonuje funkcję pierwszą, drugi przyjmuje funkcję drugą jako wpis główny:
Następnie po prostu uruchom:
Dostaniesz:
źródło
Miałem problem z użyciem tego
-ldflags
parametru podczas budowania mieszanej aplikacji wiersza polecenia i projektu biblioteki, więc skończyłem na celu Makefile do wygenerowania pliku źródłowego Go zawierającego wersję mojej aplikacji i datę kompilacji:W mojej
init()
metodzie robię to:Jeśli jednak chciałbyś zwiększyć liczbę atomów zamiast daty kompilacji, prawdopodobnie będziesz musiał utworzyć plik lokalny zawierający ostatni numer kompilacji. Twój Makefile odczyta zawartość pliku do zmiennej, zwiększy ją, wstawi do
version.go
pliku zamiast daty i zapisze nowy numer kompilacji z powrotem do pliku.źródło
Służy
ldflags
do ustawiania zmiennych wmain
pakiecie:Z plikiem
main.go
:Następnie uruchomić:
Budować:
Użyj,
ldflags
aby ustawić zmienną wnon-main
pakiecie:Z plikiem
config.go
:Będziesz także potrzebował pliku
main.go
:Najpierw zbuduj swój plik binarny:
Znajdź pełną ścieżkę nazwy zmiennej, którą chcesz ustawić:
Uruchom i zbuduj plik binarny ponownie, ale z
ldflags
:Zainspirowany przez https://github.com/golang/go/wiki/GcToolchainTricks#inclusion-build-information-in-the-executable
Również jeśli używasz,
goreleaser
przeczytaj tę https://goreleaser.com/#using-the-main-version :Jeśli chcesz zobaczyć to w akcji: https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go
źródło
używać wielu
-ldflags
:źródło
W systemie operacyjnym Windows, biorąc pod uwagę poniższy program
Możesz budować za pomocą
Format daty zakłada, że twoje środowisko
echo %date%
jestFri 07/22/2016
iecho %time%
jest16:21:52.88
Następnie dane wyjściowe będą:
version=0.0.1, date=2016-07-22T16:21:52
źródło