Şəkildə tam ölçüdə görüntüləmək üçün Enter düyməsini basın və ya vurun
Getin bina orada ən sürətli və sadə təcrübələrdən biridir. Bir “qurun və unut” düyməsini istəyirsiniz? Getdə demək olar ki, budur.
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build
-tags "prod"
-ldflags "-s -w -X 'main.Version=v1.0.0'"
-o app
.
Beləliklə … burada nə baş verir
- Goos / GoArch – Hədəf OS və Memarlıq:
linux/amd64,darwin/arm64,windows/amd64və s. - Cgo_enabled=0 – Maksimum dərəcədə “özünə məxsus” çarpaz tərtib edilmiş ikili əldə edə bilərsiniz.
-tags "prod"– Quraşdırma etiketi ilə qorunan kod daxildir//go:build prod(bir faylın başında). Bir neçə keçə bilərsiniz:-tags "prod,postgres".-ldflags– Parametrləri bağlayın (aşağıdakı linker haqqında danışacağıq):
1.-s -wİkili ölçüsünü azaldın (simvol cədvəlini və cırtdan debug məlumatlarını soyun),
2. -x ‘main.version=v1.0.0’ paket magistralındakı simli dəyişən versiyasını enjektır.-o app– Çıxış fayl adı..– Nə qurmaq (indiki qovluq sizinləmain).
İş yerində quraşdırılmış versiyanı görmək üçün minimal bir nümunə:
package mainimport (
"flag"
"fmt"
)
var Version="dev" // will be overwritten via -ldflags -X
func main() {
showVersion :=flag.Bool("version", false, "show build version")
flag.Parse()
if *showVersion {
fmt.Printf("Version: %sn", Version)
return
}
// your code...
}
Qurmaq və yoxlamaq:
go build -ldflags "-X 'main.Version=v1.2.3'" -o app .
./app -version # or --version
Əvvəllər Linker’i qeyd etdim – Qısaca görüşək
Bu linker Final “Gluer” dir: Tərtib edilmiş paketlər və gediş iş vaxtı, bütün istinadları (funksiyaların / məlumatların ünvanları) həll edir, ölü kodu çıxarır, tətbiq olunur -ldflagsvə bir giriş nöqtəsi ilə bir icra edilə bilən bir şey istehsal edir. Defolt Go istifadə edir daxili Linker (go tool link) – Tez və çarpaz platforma, demək olar ki, hər şey üçün yaxşıdır. Bu xarici Linker yalnız müstəsna hallarda lazımdır: CGO / sistem kitabxanalarından istifadə edərkən və ya xüsusi rejimlər (məsələn,) -linkmode=external).
Lazımlı əlavələr (isteğe bağlı)
-trimpath– İkili (təmiz artefaktlardan) mənbə yollarını çıxarır.-race– Müzakirəyə görə (istehsal üçün deyil) yarış detektoru.
Hazır “prod” şablonu
GOOS=linux GOARCH=amd64 CGO_ENABLED=0
go build -trimpath
-tags "prod"
-ldflags "-s -w -X 'main.Version=1.0.0'"
-o app
./cmd/app
Əksər xidmətlər üçün bu, hədəf platformanı təyin edin, lazım olan etiketləri aktiv edin, versiyada bişirin – və yerləşdirməyə hazır olan bir ikili hazırsınız.
