O vinculador Go ( link da ferramenta go ) tem uma opção para definir o valor de uma variável de cadeia não inicializada:
-X importpath.name=value
Set the value of the string variable in importpath named name to
valor. Observe que antes do Go 1.5, essa opção usava dois argumentos separados. Agora, é necessário um argumento dividido no primeiro sinal =.
Como parte do seu processo de construção, você pode definir uma variável de cadeia de versão usando isso. Você pode passar isso pela go
ferramenta usando -ldflags
. Por exemplo, dado o seguinte arquivo de origem:
package main
import "fmt"
var xyz string
func main() {
fmt.Println(xyz)
}
Então:
$ go run -ldflags "-X main.xyz=abc" main.go
abc
Para definir main.minversion
a data e a hora da construção ao criar:
go build -ldflags "-X main.minversion=`date -u +.%Y%m%d.%H%M%S`" service.go
Se você compilar sem inicializar main.minversion
dessa maneira, ele conterá a sequência vazia.
go bouild
vez 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"
não funcionará enquantogo build -ldflags "-X path/to/pkg.version=123"
trabalha como esperado. espero que ajude.Além disso, gostaria de postar um pequeno exemplo de como usar o git e um makefile:
O arquivo make criará dois executáveis. Um está executando a função um, o outro assumirá a função dois como entrada principal:
Em seguida, basta executar:
Você vai ter:
fonte
Eu tive problemas ao usar o
-ldflags
parâmetro ao criar meu aplicativo de linha de comando e projeto de biblioteca combinados, então acabei usando um destino Makefile para gerar um arquivo de origem Go contendo a versão do aplicativo e a data de compilação:No meu
init()
método, faço isso:Se você quisesse um número de compilação com aumento atômico em vez de uma data de compilação, no entanto, provavelmente seria necessário criar um arquivo local que contivesse o último número de compilação. Seu Makefile lê o conteúdo do arquivo em uma variável, incrementa-o, insere-o no
version.go
arquivo em vez da data e grava o novo número da compilação novamente no arquivo.fonte
Use
ldflags
para definir variáveis emmain
pacote:Com arquivo
main.go
:Então corra:
Construir:
Use
ldflags
para definir variável em umnon-main
pacote:Com arquivo
config.go
:Você também precisará do arquivo
main.go
:Crie seu binário primeiro:
Encontre o caminho completo do nome da variável que você deseja definir:
Execute e construa o binário novamente, mas com o
ldflags
:Inspirado em https://github.com/golang/go/wiki/GcToolchainTricks#including-build-information-in-the-executable
Além disso, se você estiver usando
goreleaser
, leia esta https://goreleaser.com/#using-the-main-version :Se você quiser ver isso em ação: https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go
fonte
usar multi
-ldflags
:fonte
No sistema operacional Windows, conforme o programa abaixo
Você pode construir usando
O formato da data assume que seu ambiente
echo %date%
éFri 07/22/2016
eecho %time%
é16:21:52.88
Então a saída será:
version=0.0.1, date=2016-07-22T16:21:52
fonte