Quelles sont les différences entre panique et erreur critique qui arrêtent l'exécution du programme?
sobes.tech IA
Réponse de l'IA
En Go, la panique (panic) est un mécanisme qui se déclenche lors d'une erreur critique pendant l'exécution du programme, par exemple, dépasser les limites d'une tranche ou appeler explicitement panic(). La panique entraîne l'arrêt immédiat de l'exécution normale de la goroutine en cours et commence le processus de "déroulement" de la pile (stack unwinding), en appelant les fonctions différées (defer). Si la panique n'est pas récupérée avec recover(), le programme se termine avec une erreur.
Une erreur critique qui arrête l'exécution du programme peut être causée par une panique, mais peut aussi être liée à des erreurs fatales au niveau du système (par exemple, une erreur de segmentation), qui ne peuvent pas être gérées dans le code.
Principales différences :
- Panic — un mécanisme contrôlé qui peut être intercepté et géré avec
recover(). - Erreur critique — peut être irrécupérable, conduisant à une terminaison immédiate du programme sans possibilité de récupération.
Exemple d'utilisation de panic et recover :
func mayPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Récupéré après panic:", r)
}
}()
panic("quelque chose a mal tourné")
}
func main() {
mayPanic()
fmt.Println("Le programme continue")
}