Hata döndürme
- Go kursu
- Başlangıç
- Ders 84/90
- 4 dk
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
package main
import (
"errors"
"fmt"
)
func main() {
// buraya yaz
}Örnek çözüm
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
return "", fmt.Errorf("kullanıcı %d: ____", id, ErrBulunamadi)
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 |