English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Panic est un mécanisme que nous utilisons pour gérer les situations d'erreur. Les situations d'urgence peuvent être utilisées pour interrompre l'exécution d'une fonction. Lorsqu'une fonction appelle panic, son exécution cesse et le flux de contrôle passe à la fonction décalée correspondante.
L'appelant de cette fonction sera également arrêté et les fonctions décalées de l'appelant seront exécutées (si elles existent). Ce processus se poursuit jusqu'à la fin du programme. Reportez maintenant l'état d'erreur.
Cette séquence de terminaison est appelée panic et peut être contrôlée par la fonction intégrée recover.
package main import "os" func main() { panic("Situation d'erreur") _ , err := os.Open("/tmp/file) if err != nil { panic(err) } }
Sortie :
panic: Situation d'erreur goroutine 1 [en cours d'exécution]: main.main() /Users/pro/GoglandProjects/Panic/example de panic1.go:6 +0x39
package main import "fmt" func main() { fmt.Println("Appelant x depuis main.") x() fmt.Println("Renvoyé de x.") } func x() { defer func() { if r := recover(); r != nil { fmt.Println("Récupéré dans x", r) } }() fmt.Println("Exécutant x...") fmt.Println("Appelant y.") y(0) fmt.Println("Renvoyé normalement de y.") } func y(i int) { fmt.Println("Exécutant y....") if i > 2 { fmt.Println("Panique !") panic(fmt.Sprintf("%v", i)) } defer fmt.Println("Retardé dans y", i) fmt.Println("Imprimant dans y", i) y(i + 1) }
Sortie :
Appelant x depuis main. Exécutant x... Appelant y. Exécutant y.... Imprimant dans y 0 Exécutant y.... Imprimant dans y 1 Exécutant y.... Imprimant dans y 2 Exécutant y.... Panique ! Retardé dans y 2 Retardé dans y 1 Retardé dans y 0 Récupéré dans x 3 Retour de x.