Go compiler
- Go kursu
- Uzman
- Ders 13/34
- 4 dk
Go derleyicisinin aşamalarını öğrenirsin.
Go derleyicisi
go build arka planda cmd/compile derleyicisini çalıştırır. Aşamalar: ayrıştırma (kaynak → sözdizimi ağacı), tür denetimi, IR üretimi ve kaçış analizi, inlining, SSA optimizasyonları, son olarak makine kodu. Ardından cmd/link paketleri tek bir ikiliye bağlar.
go build -x . # çalıştırılan komutları gösterir
go tool compile -S x.go # üretilen assemblyGo derleyicisi hızlı derlemeye odaklıdır; büyük projeler bile saniyeler içinde derlenir.
Derleme önbelleği
Go her paketin derleme sonucunu girdilerinin özetine göre önbelleğe alır (go env GOCACHE). Bir dosya değişmediyse paket yeniden derlenmez. go build -a önbelleği yok sayar; go clean -cache temizler. Çapraz derleme için yalnızca GOOS ve GOARCH değişkenlerini ayarlamak yeterlidir.
Uygulama Derleme bilgisi
runtime.Version(), runtime.GOOS ve runtime.GOARCH değerleri programın hangi araç zinciriyle ve hedefle derlendiğini söyler. runtime.Version()'ın "go" ile başladığını strings.HasPrefix ile kontrol edip yazdır.
Başlangıç kodu
package main
import (
"fmt"
"runtime"
"strings"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"runtime"
"strings"
)
func main() {
fmt.Println(strings.HasPrefix(runtime.Version(), "go"))
}Beklenen çıktı
true
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Paketleri tek bir ikiliye hangi araç birleştirir?
- cmd/compile
- go vet
- gofmt
- cmd/link (bağlayıcı) Doğru cevap
Açıklama: Derleyici her paketi nesne dosyasına çevirir; bağlayıcı bunları ve çalışma zamanını tek bir çalıştırılabilir dosyada birleştirir.
2 Assembly gör
go build -gcflags=____ . 2>&1 | head
go build -gcflags=-S . 2>&1 | head
Açıklama: -gcflags=-S derleyicinin ürettiği assembly çıktısını yazdırır.
3 Derleme aşaması
| Kavram | Anlamı |
|---|---|
Ayrıştırma |
Sözdizimi ağacı |
Tür denetimi |
Tür hataları |
SSA |
Optimizasyon |
Bağlama |
Tek ikili |