CodeBlanks Logo Icon CodeBlanks

fmt.Errorf

Errorf ile biçimli hata oluşturmayı öğrenirsin.

fmt.Errorf

fmt.Errorf biçimli bir hata oluşturur. %w verb'i alttaki hatayı sarar: mesaja bağlam eklenir ama asıl hata kaybolmaz.

f, err := os.Open(yol)
if err != nil {
    return fmt.Errorf("ayar okunamadı (%s): %w", yol, err)
}

Çağıran taraf errors.Is(err, fs.ErrNotExist) ile asıl nedeni yine sorgulayabilir. %v kullanılsaydı yalnızca metin kopyalanır, zincir kopardı.

errors.As ve özel hatalar

Hata türüne göre karar vermek için errors.As zincirde belirli bir türü arar:

type DogrulamaHatasi struct{ Alan string }
func (e *DogrulamaHatasi) Error() string { return e.Alan + " geçersiz" }

err := fmt.Errorf("kayıt: %w", &DogrulamaHatasi{"eposta"})
var dh *DogrulamaHatasi
if errors.As(err, &dh) {
    fmt.Println(dh.Alan)  // eposta
}

Go 1.20'den beri tek Errorf içinde birden çok %w kullanılabilir.

Uygulama Sarılmış hata

var ErrYok = errors.New("kayıt yok") tanımla. bul(id int) error fonksiyonu fmt.Errorf("bul %d: %w", id, ErrYok) döndürsün. Hatayı ve errors.Is(err, ErrYok) sonucunu ayrı satırlarda yazdır.

Başlangıç kodu

main.go
package main

import (
    "errors"
    "fmt"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "errors"
    "fmt"
)

var ErrYok = errors.New("kayıt yok")

func bul(id int) error {
    return fmt.Errorf("bul %d: %w", id, ErrYok)
}

func main() {
    err := bul(7)
    fmt.Println(err)
    fmt.Println(errors.Is(err, ErrYok))
}

Beklenen çıktı

bul 7: kayıt yok
true

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>%w</code> yerine <code>%v</code> ile sarılan hatada <code>errors.Is</code> ne döner?

  • false; zincir kopmuştur Doğru cevap
  • true
  • panic
  • nil

Açıklama: %v yalnızca mesajı metne çevirir; Unwrap yöntemi olmadığı için errors.Is asıl hataya ulaşamaz.

2 Hatayı sar

Soru
return fmt.Errorf("bağlantı kurulamadı: ____", err)
Cevap
return fmt.Errorf("bağlantı kurulamadı: %w", err)

Açıklama: %w hatayı sarar; errors.Is ve errors.As zincirde ona ulaşabilir.

3 Fonksiyon ve görevi

Kavram Anlamı
fmt.Errorf + %w Bağlamla sar
errors.Is Belirli hata mı?
errors.As Belirli tür mü?
errors.Unwrap Bir kat aç

Orta seviye bölümündeki tüm dersler