error recovered belirli bir türde olup olmadığını kontrol eden bir type assertion'dur.
Bu tür onaylama işlemi başarısız olur; bu, yığının hiçbir şeyin kesintiye uğramış gibi çözülmesini sürdüren bir çalışma zamanı hatasına neden olur.
Bu, yerel bir MyError
tipi hata için tanımladığınızda ve yalnızca bu türden kurtarmak istediğinizde kullanışlıdır.
Bir tür iddianın bir net.Error test ve ardından kalıcı olanlardan geçici ağ hataları ayırt edebilirsiniz "Error handling and Go"
Müşteri kodundaki bir örnek görebilirsiniz. Örneğin
, bir web tarayıcısı olabilir:
- uyku ve bunun geçici bir hatayı
- karşılaşır ve aksi vazgeçmek ne zaman yeniden deneyin.
if nerr, ok := err.(net.Error); ok && nerr.Temporary() {
time.Sleep(1e9)
continue
}
if err != nil {
log.Fatal(err)
}
Eğer kurtarmak istediğiniz hata birkaç türleri varsa, bir tür anahtarını kullanabilirsiniz "Golang: returning from defer"
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
// find out exactly what the error was and set err
switch x := r.(type) {
case string:
err = errors.New(x)
case error:
err = x
default:
err = errors.New("Unknown panic")
}
// invalidate rep
rep = nil
// return the modified err and rep
}
}()
içindedir