Junior — Middle
Care sunt diferențele dintre panică și eroare critică care oprește execuția programului?
sobes.tech AI
Răspuns de la AI
În Go, panic este un mecanism care se activează în cazul unei erori critice în timpul execuției programului, de exemplu, accesul în afara limitelor unui slice sau apelul explicit al panic(). panic duce la încetarea imediată a execuției normale a goroutine-ului curent și începe procesul de "desfășurare" a stivei (stack unwinding), apelând funcțiile defer. Dacă panic nu este gestionat cu recover(), programul se va încheia cu o eroare.
O eroare critică care oprește execuția programului poate fi cauzată de un panic, dar poate fi legată și de erori fatale la nivel de sistem (de exemplu, o eroare de segmentare), care nu pot fi gestionate în cod.
Diferențele principale:
- Panic — un mecanism controlabil, care poate fi interceptat și gestionat cu
recover(). - Eroare critică — poate fi negestionabilă, conducând la terminarea imediată a programului fără posibilitatea de recuperare.
Exemplu de utilizare a panic și recover:
func mayPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recuperat după panic:", r)
}
}()
panic("ceva nu a mers bine")
}
func main() {
mayPanic()
fmt.Println("Programul continuă")
}