Panic ve Recover: Go'da Hata Yönetiminde Doğru Zamanlar
Go'da hata yönetimi genellikle `error` döndürmekle yapılır ama bazı durumlarda program çöküşü kaçınılmaz görünür. burada `panic` ve `recover` devreye girer.
Panic nedir?
Panic, programın normal akışını durdurarak bir panik durumu başlatır. Null pointer erişimi, dizinin sınırı aşması gibi çalışma zamanı hataları otomatik olarak panic tetikler. Siz de isteyerek `panic()` çağırabilirsiniz.
Recover ne işe yarar?
Recover, panic sırasında program çökmeden önce kontrolü geri almayı sağlar. Yalnızca `defer` içinde çalışır. Panic yakalandığında uygulamayı kurtarabilir veya temiz bir şekilde kapatabilirsiniz.
Doğru zaman nedir?
Panic sadece gerçekten kurtarılamayan durumlarda kullanılır: başlangıç yapılandırması başarısız, veritabanı bağlantısı imkansız. Günlük hataları (dosya bulunamadı, ağ zaman aşımı) `error` döndürerek yönetin.
Pratik örnek:
1package main23import (4"fmt"5)67func riskyOperation() {8panic("Kritik hata oluştu!")9}1011func main() {12defer func() {13if r:= recover(); r!= nil {14fmt.Println("Hata yakalandı:", r)15fmt.Println("Program devam ediyor...")16}17}()1819fmt.Println("Operasyon başlıyor...")20riskyOperation()21fmt.Println("Bu satır çalışmayacak")22}Çıktı:
1Operasyon başlıyor...2Hata yakalandı: Kritik hata oluştu!3Program devam ediyor...Dikkat: Recover olmadan panic program tamamen durur. Recover ile panik durmuş olsa da, `riskyOperation()` sonrası kodlar çalışmaz; sadece defer bloğu çalışır. Gerçek uygulamalarda panic kullanmadan önce iki kez düşün. Çoğu durumda `error` dönüp çağıran fonksiyona karar verme sorumluluğunu bırakmak daha temiz ve esnek bir tasarımdır.
0 yorum