Aller au contenu

Panic et recover

  • panic arrête le flux normal, exécute les defer, puis le programme se termine.
  • recover est une fonction qui permet de reprendre le contrôle après un panic. Elle doit être appelée à l’intérieur d’une fonction différée (defer).

À utiliser uniquement pour des erreurs irrécupérables (ex. état incohérent). Pour les erreurs normales, préférez la gestion par error.

Attraper un panic et continuer.

package main
import "fmt"
func main() {
// Fonction qui peut paniquer
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from:", r)
}
}()
fmt.Println("Avant panic")
panic("une erreur grave")
fmt.Println("Ceci ne sera pas exécuté")
}
Fenêtre de terminal
Avant panic
Recovered from: une erreur grave

Le programme ne plante pas, mais il continue après le recover. Cela peut être utile pour des serveurs web (éviter qu’une requête ne fasse planter tout le serveur).