İçindeki ldflags
değişkenleri ayarlamak için kullanınmain
Paketteki :
Dosya ile main.go
:
package main
import "fmt"
var (
version string
build string
)
func main() {
fmt.Println("version=", version)
fmt.Println("build=", build)
}
O zaman koş:
go run \
-ldflags "-X main.version=1.0.0 -X main.build=12082019" \
main.go
İnşa etmek:
go build -o mybinary \
-ldflags "-X main.version=1.0.0 -X 'main.build=$(date)'" \
main.go
Kullanım ldflags
a'da ayarlanan değişkenenon-main
paketteki :
Dosya ile config.go
:
package config
import "fmt"
var (
Version string
)
func LogVersion() {
fmt.Println("version=", Version)
}
Ayrıca dosyaya da ihtiyacınız olacak main.go
:
package main
import (
"fmt"
"github.com/user/repo/config"
}
func main() {
config.LogVersion()
}
Öncelikle ikili dosyanızı oluşturun:
go build -o mybinary main.go
Ayarlamak istediğiniz değişken adının tam yolunu bulun:
go tool nm <path_to_binary> | grep Version
İkili çalıştırıp tekrar oluşturun ldflags
:
go run \
-ldflags "-X github.com/user/repo/config.Version=1.0.0" \
main.go --version
go build -o mybinary \
-ldflags "-X github.com/user/repo/config.Version=1.0.0" \
main.go
Esinlenen https://github.com/golang/go/wiki/GcToolchainTricks#included-build-information-in-the-exutable
Ayrıca kullanıyorsanız, goreleaser
bu https://goreleaser.com/#using-the-main-version adresini okuyun :
Varsayılan bilge GoReleaser üç ldflags ayarlar:
main.version: Geçerli Git etiketi
main.commit: Geçerli git commit SHA
main.date: RFC3339'a göre tarih
Bunu çalışırken görmek istiyorsanız: https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go
go bouild
Bunun yerine kullanırsam bu değer ikili dosyaya kaydedilirgo run
mi?