ใช้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-information-in-the-executable
นอกจากนี้หากคุณใช้งานอยู่ให้goreleaser
อ่านhttps://goreleaser.com/#using-the-main-versionนี้:
ค่าเริ่มต้น GoReleaser ที่ฉลาดตั้งสาม ldflags
main.version: แท็ก Git ปัจจุบัน main.commit: Git
ปัจจุบันกระทำ SHA
main.date: วันที่ตาม RFC3339
หากคุณต้องการเห็นการทำงานนี้: https://github.com/hoto/fuzzy-repo-finder/blob/master/pkg/config/config.go
go bouild
แทนgo run
?