CodeBlanks Logo Icon CodeBlanks

Hata döndürme

errors.New ve fmt.Errorf ile hata döndürmeyi öğrenirsin.

Hata döndürme

Basit hatalar için errors.New, biçimli mesaj ve bağlam için fmt.Errorf kullanılır. Çağıranın karşılaştırabileceği hatalar paket düzeyinde değişken olarak tanımlanır (sentinel hata):

var ErrBulunamadi = errors.New("kayıt bulunamadı")

func bul(id int) (string, error) {
    if id != 1 {
        return "", fmt.Errorf("kullanıcı %d: %w", id, ErrBulunamadi)
    }
    return "Ada", nil
}

Hata mesajları küçük harfle başlar ve nokta ile bitmez; çünkü başka mesajlara eklenerek kullanılırlar.

Hataya bağlam eklemek

Hata yukarı doğru iletilirken her katman ne yaptığını ekler; sonunda okunur bir zincir oluşur:

// depo:    kayıt bulunamadı
// servis:  kullanıcı 7: kayıt bulunamadı
// handler: profil yüklenemedi: kullanıcı 7: kayıt bulunamadı

Aynı hatayı hem loglayıp hem döndürmek yinelenen log satırlarına yol açar; ya ele al ya da bağlam ekleyip ilet.

Uygulama Kullanıcı bul

Yukarıdaki ErrBulunamadi ve bul(id int) (string, error) fonksiyonunu yaz. bul(1) ve bul(7) sonuçlarını ayrı satırlarda yazdır (fmt.Println(bul(...))).

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 ErrBulunamadi = errors.New("kayıt bulunamadı")

func bul(id int) (string, error) {
    if id != 1 {
        return "", fmt.Errorf("kullanıcı %d: %w", id, ErrBulunamadi)
    }
    return "Ada", nil
}

func main() {
    fmt.Println(bul(1))
    fmt.Println(bul(7))
}

Beklenen çıktı

Ada <nil>
 kullanıcı 7: kayıt bulunamadı

Soru ve cevaplar

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

1 Hata varken diğer dönüş değerleri ne olmalıdır?

  • Rastgele
  • Sıfır değerleri ("" , 0, nil) Doğru cevap
  • Son geçerli değer
  • -1

Açıklama: Gelenek: hata varken diğer değerlere güvenilmez ve sıfır değer döndürülür; çağıran önce hatayı kontrol eder.

2 Bağlamla sar

Soru
return "", fmt.Errorf("kullanıcı %d: ____", id, ErrBulunamadi)
Cevap
return "", fmt.Errorf("kullanıcı %d: %w", id, ErrBulunamadi)

Açıklama: %w hatayı sarar; çağıran errors.Is ile asıl hatayı bulabilir.

3 Araç ve kullanım

Kavram Anlamı
errors.New Basit hata
fmt.Errorf + %w Bağlamlı hata
var ErrX = ... Karşılaştırılabilir hata
return "", err Sıfır değer + hata

Başlangıç bölümündeki tüm dersler