El enlazador Go ( enlace de herramienta go ) tiene una opción para establecer el valor de una variable de cadena no inicializada:
-X importpath.name=value
Set the value of the string variable in importpath named name to
valor. Tenga en cuenta que antes de ir a 1.5 esta opción tomó dos argumentos separados. Ahora se necesita un argumento dividido en el primer signo =.
Como parte de su proceso de compilación, puede establecer una variable de cadena de versión con esto. Puede pasar esto a través de la go
herramienta usando -ldflags
. Por ejemplo, dado el siguiente archivo fuente:
package main
import "fmt"
var xyz string
func main() {
fmt.Println(xyz)
}
Luego:
$ go run -ldflags "-X main.xyz=abc" main.go
abc
Para establecer main.minversion
la fecha y hora de compilación al compilar:
go build -ldflags "-X main.minversion=`date -u +.%Y%m%d.%H%M%S`" service.go
Si compila sin inicializar main.minversion
de esta manera, contendrá la cadena vacía.
go bouild
lugar 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"
no funcionará mientrasgo build -ldflags "-X path/to/pkg.version=123"
trabaje como se esperaba. Espero eso ayude.Además, me gustaría publicar un pequeño ejemplo de cómo usar git y un archivo MAKE:
El archivo make creará dos ejecutables. Uno está ejecutando la función uno, el otro tomará la función dos como entrada principal:
Entonces solo corre:
Conseguirás:
fuente
Tuve problemas para usar el
-ldflags
parámetro al compilar mi proyecto mixto de aplicación de línea de comandos y biblioteca, así que terminé usando un destino Makefile para generar un archivo fuente Go que contiene la versión de mi aplicación y la fecha de compilación:En mi
init()
método, hago esto:Sin embargo, si desea un número de compilación que aumente atómicamente en lugar de una fecha de compilación, probablemente necesitará crear un archivo local que contenga el último número de compilación. Su Makefile leería el contenido del archivo en una variable, lo incrementaría, lo insertaría en el
version.go
archivo en lugar de la fecha y volvería a escribir el nuevo número de compilación en el archivo.fuente
Use
ldflags
para establecer variables en elmain
paquete:Con archivo
main.go
:Entonces corre:
Construir:
Use
ldflags
para establecer la variable en unnon-main
paquete:Con archivo
config.go
:También necesitará el archivo
main.go
:Construye tu binario primero:
Encuentre la ruta completa del nombre de la variable que desea establecer:
Ejecuta y construye el binario nuevamente pero con
ldflags
:Inspirado en https://github.com/golang/go/wiki/GcToolchainTricks#incuding-build-information-in-the-executable
Además, si está utilizando
goreleaser
, lea este https://goreleaser.com/#using-the-main-version :Si quieres ver esto en acción: https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go
fuente
usar multi
-ldflags
:fuente
En el sistema operativo Windows dado el programa a continuación
Puedes construir usando
El formato de fecha supone que su entorno
echo %date%
esFri 07/22/2016
yecho %time%
es16:21:52.88
Entonces la salida será:
version=0.0.1, date=2016-07-22T16:21:52
fuente