CodeBlanks Logo Icon CodeBlanks

Derleyici direktifleri

//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 generate ile ç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 string

Derleme 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

main.go
package main

import (
    "fmt"
    "io/fs"
    "testing/fstest"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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ı

Soru
//go:____ !windows

package main
Cevap
//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

Uzman bölümündeki tüm dersler