CodeBlanks Logo Icon CodeBlanks

error interface

error interface'ini ve Error() metodunu öğrenirsin.

error interface

Go'da hata, yerleşik error interface'ini karşılayan herhangi bir değerdir:

type error interface {
    Error() string
}

Fonksiyonlar hatayı son dönüş değeri olarak verir; başarıda nil döner. Hatalar istisna (exception) değil, sıradan değerlerdir; if err != nil ile kontrol edilir.

f, err := os.Open("ayar.json")
if err != nil {
    return err
}
defer f.Close()

Özel hata türü

Ek bilgi taşıyan hata türleri, çağıranın hatayı daha iyi ele almasını sağlar:

type DogrulamaHatasi struct {
    Alan  string
    Neden string
}

func (e *DogrulamaHatasi) Error() string {
    return e.Alan + ": " + e.Neden
}

func dogrula(yas int) error {
    if yas < 0 {
        return &DogrulamaHatasi{"yaş", "negatif olamaz"}
    }
    return nil
}

Uygulama Doğrulama hatası

Yukarıdaki DogrulamaHatasi türünü ve dogrula(yas int) error fonksiyonunu yaz. dogrula(-3) ve dogrula(20) sonuçlarını ayrı satırlarda yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type DogrulamaHatasi struct {
    Alan  string
    Neden string
}

func (e *DogrulamaHatasi) Error() string {
    return e.Alan + ": " + e.Neden
}

func dogrula(yas int) error {
    if yas < 0 {
        return &DogrulamaHatasi{"yaş", "negatif olamaz"}
    }
    return nil
}

func main() {
    fmt.Println(dogrula(-3))
    fmt.Println(dogrula(20))
}

Beklenen çıktı

yaş: negatif olamaz
<nil>

Soru ve cevaplar

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

1 Kendi hata türünü yazmak için ne gerekir?

  • panic çağırmak
  • errors paketine kayıt
  • Error() string yöntemi olan bir tür Doğru cevap
  • error'dan kalıtım

Açıklama: Örtük karşılama burada da geçerlidir; Error() string yöntemi olan her tür error'dır.

2 Hata yöntemi

Soru
func (e *DogrulamaHatasi) ____() string {
    return e.Alan + ": " + e.Neden
}
Cevap
func (e *DogrulamaHatasi) Error() string {
    return e.Alan + ": " + e.Neden
}

Açıklama: Error() string yöntemi türü error interface'ini karşılar hâle getirir.

3 Kavram

Kavram Anlamı
error Error() string
nil hata Başarı
if err != nil Hata kontrolü
*DogrulamaHatasi Özel hata türü

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