Junior — Middle
Programmanın çalışmasını durduran panik ve kritik hata arasında ne gibi farklar vardır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde, panic kritik bir hata sırasında ortaya çıkan bir mekanizmadır, örneğin dilim sınırlarının dışına çıkmak veya açıkça panic() çağırmak gibi. Panic, mevcut goroutine'un normal yürütülmesini derhal durdurur ve "stack unwinding" (yığın sarmalaması) sürecini başlatır, bu süreçte defer ile tanımlanmış fonksiyonlar çağrılır. Eğer panic, recover() ile yakalanmazsa, program bir hata ile sona erer.
Programın yürütmesini durduran kritik bir hata, bir panic nedeniyle olabilir, ancak aynı zamanda sistem seviyesindeki ölümcül hatalar (örneğin, segmentasyon hatası) nedeniyle de olabilir ve bu hatalar kodda işlenemez.
Ana farklar:
- Panic — kontrol edilebilir bir mekanizma olup,
recover()ile yakalanabilir ve işlenebilir. - Kritik hata — işlenemeyebilir ve programın anında sona ermesine neden olabilir, geri kazanım imkanı olmadan.
Panik ve recover kullanımı örneği:
func mayPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Panik sonrası kurtarma:", r)
}
}()
panic("bir şeyler ters gitti")
}
func main() {
mayPanic()
fmt.Println("Program devam ediyor")
}