पैकेज ldflags
में चर सेट करने के लिए उपयोग करें main
:
फ़ाइल के साथ main.go
:
package main
import "fmt"
var (
version string
build string
)
func main() {
fmt.Println("version=", version)
fmt.Println("build=", build)
}
फिर भागो:
go run \
-ldflags "-X main.version=1.0.0 -X main.build=12082019" \
main.go
बिल्ड:
go build -o mybinary \
-ldflags "-X main.version=1.0.0 -X 'main.build=$(date)'" \
main.go
पैकेज ldflags
में चर सेट करने के लिए उपयोग करें non-main
:
फ़ाइल के साथ config.go
:
package config
import "fmt"
var (
Version string
)
func LogVersion() {
fmt.Println("version=", Version)
}
आपको फ़ाइल की भी आवश्यकता होगी main.go
:
package main
import (
"fmt"
"github.com/user/repo/config"
}
func main() {
config.LogVersion()
}
पहले अपना बाइनरी बनाएँ:
go build -o mybinary main.go
उस चर नाम का पूरा मार्ग खोजें जिसे आप सेट करना चाहते हैं:
go tool nm <path_to_binary> | grep Version
बाइनरी को फिर से चलाएं और बनाएं लेकिन इसके साथ 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
Https://github.com/golang/go/wiki/GcToolchainTricks#including-build-information-in-the-executable से प्रेरित
इसके अलावा अगर आप उपयोग कर रहे हैं goreleaser
तो इस https://goreleaser.com/#use-the-main-version को पढ़ें :
डिफ़ॉल्ट बुद्धिमान GoReleaser तीन ldflags सेट करता है:
main.version: करंट गिट टैग
main.commit: करंट गिट कम SHA
main.date: दिनांक RFC3339 के अनुसार
यदि आप इसे क्रिया में देखना चाहते हैं: https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go
go bouild
इसके बजाय उपयोग करता हूं तो क्या उस मूल्य को बाइनरी में सहेजा जाएगाgo run
?