Maison > Article > développement back-end > Pouvez-vous paniquer à l'intérieur d'une fonction de report pendant une panique existante en Go ?
Dans l'extrait de code Go donné, une panique se produit dans le sous-marin ( ) fonction. Une fonction différée à l'intérieur de sub() panique alors à nouveau, avec une valeur différente. La question est : est-il permis de paniquer à l'intérieur d'une fonction de report, en particulier lorsque le programme panique déjà ?
Oui, il est acceptable de paniquer au sein d'une fonction de report, même pendant une fonction de report. panique existante. La panique provoquée par une fonction différée ne déclenche pas un état unique ou extraordinaire ; cela prolonge simplement la séquence de panique.
L'exemple de code fourni démontre que la panique provoquée par une fonction de report est inoffensive et permet même une récupération à l'aide de recovery() à un niveau supérieur.
Selon la spécification Go sur la gestion des paniques :
"Si une fonction sur la même goroutine panique, les fonctions différées s'exécuteront dans le même ordre dans lequel elles ont été différées, avec la fonction différée la plus externe (celle appelé en dernier) exécuté en premier. Si des appels de fonction différés sont récupérés et qu'une panique s'est produite n'importe où dans la goroutine, la valeur transmise à recovery sera la valeur transmise à l'appel initial à panic. "
Bien qu'il soit permis de paniquer à l'intérieur d'une fonction différée, il est important de noter que :
L'exemple suivant illustre ce comportement :
<code class="go">func main() { defer func() { fmt.Println("Checkpoint 1"); panic(1) }() defer func() { fmt.Println("Checkpoint 2"); panic(2) }() panic(999) }</code>
Sortie :
Checkpoint 2 Checkpoint 1 panic: 999 panic: 2 panic: 1
Toutes les fonctions différées s'exécutent et les valeurs transmises à tous les appels panic() sont incluses dans la séquence de panique finale.
Paniquer à l'intérieur d'une fonction de report, même lors d'une panique existante, est acceptable dans Go. Cependant, il est important d'être conscient de l'ordre et des conséquences de l'exécution différée d'une fonction, et d'utiliser recovery() de manière appropriée pour gérer les paniques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!