English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base Golang

Instructions de contrôle Golang

Fonctions et méthodes Golang

Structures Golang

Coupes et tableaux Golang

Chains de caractères (String) Golang

Pointeurs Golang

Interfaces Golang

Concurrence Golang

Exceptions Golang

Autres éléments Golang

Panic du langage Go

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.

Exemple de panic1:

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

Exemple de panic2

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.