Derleyici direktifleri
- Go kursu
- Uzman
- Ders 17/34
- 4 dk
//go:nosplit gibi direktifleri öğrenirsin.
Derleyici yönergeleri
//go: ile başlayan yorumlar derleyiciye talimattır (arada boşluk olmamalı). Sık kullanılanlar:
//go:noinline— inline etme.//go:build linux— dosyayı yalnızca bu koşulda derle.//go:embed— dosyayı ikiliye göm.//go:generate—go generateile çalışacak komut.//go:nosplit,//go:noescape— çalışma zamanı ve assembly için düşük seviye yönergeler.
go:embed ve go:build
embed paketiyle dosyalar derleme anında ikiliye girer; çalışırken diskte olmaları gerekmez:
import _ "embed"
//go:embed surum.txt
var surum stringDerleme kısıtları dosyanın en üstüne yazılır: //go:build linux && amd64. Dosya adındaki _linux.go, _test.go son ekleri de benzer kısıt koyar.
Uygulama Gömülü dosya sistemi
Disk dosyası olmadan embed mantığını dene: testing/fstest.MapFS ile "surum.txt" içeriği "1.4.0" olan bir dosya sistemi oluştur ve fs.ReadFile ile okuyup yazdır.
Başlangıç kodu
package main
import (
"fmt"
"io/fs"
"testing/fstest"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"io/fs"
"testing/fstest"
)
func main() {
fsys := fstest.MapFS{"surum.txt": {Data: []byte("1.4.0")}}
b, err := fs.ReadFile(fsys, "surum.txt")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(b))
}Beklenen çıktı
1.4.0
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>// go:noinline</code> (araya boşluk koyarak) yazarsan ne olur?
- Aynı şekilde çalışır
- Derleme hatası verir
- Fonksiyon silinir
- Sıradan yorum sayılır, etkisi olmaz Doğru cevap
Açıklama: Yönergeler tam olarak //go: ile başlamalıdır; boşluklu hâli derleyici tarafından yok sayılır.
2 Derleme kısıtı
//go:____ !windows
package main
//go:build !windows
package main
Açıklama: //go:build satırı dosyanın hangi işletim sistemi/mimari koşulunda derleneceğini belirler.
3 Yönerge ve etkisi
| Kavram | Anlamı |
|---|---|
//go:build |
Koşullu derleme |
//go:embed |
Dosyayı göm |
//go:generate |
Kod üretimi komutu |
//go:noinline |
Inline etme |