Quali sono le differenze tra panico e errore critico che interrompono l'esecuzione del programma?
sobes.tech AI
Risposta dell'AI
In Go, panic è un meccanismo che si attiva in caso di errore critico durante l'esecuzione del programma, ad esempio, accesso oltre i limiti di un slice o chiamata esplicita a panic(). Il panic provoca l'interruzione immediata dell'esecuzione normale della goroutine corrente e avvia il processo di "stack unwinding" (discesa dello stack), chiamando le funzioni defer. Se il panic non viene recuperato con recover(), il programma termina con un errore.
Un errore critico che ferma l'esecuzione del programma può essere causato da un panic, ma può anche essere legato a errori fatali a livello di sistema (ad esempio, errore di segmentazione), che non possono essere gestiti nel codice.
Differenze principali:
- Panic — un meccanismo controllato che può essere intercettato e gestito con
recover(). - Errore critico — può essere non gestibile, portando alla terminazione immediata del programma senza possibilità di recupero.
Esempio di utilizzo di panic e recover:
func mayPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recuperato dopo panic:", r)
}
}()
panic("qualcosa è andato storto")
}
func main() {
mayPanic()
fmt.Println("Il programma continua")
}