Maison > développement back-end > Golang > Go Panic Recovery : différer `recover()` – Quelle est la différence ?

Go Panic Recovery : différer `recover()` – Quelle est la différence ?

Patricia Arquette
Libérer: 2024-12-03 03:35:11
original
620 Les gens l'ont consulté

Go Panic Recovery: Deferring `recover()` – What's the Difference?

Différer recovery() vs. defer recovery()

Dans Go, une panique peut être détectée et gérée à l'aide de la fonction recovery() . Cependant, il est important de noter que le placement de defer par rapport à l'appel recovery() a des implications significatives.

Scénario A : defer func() { recovery() }()

Dans ce scénario, l'instruction defer planifie qu'une fonction anonyme soit exécutée à la fin de la fonction en cours. Lorsque cette fonction est exécutée, elle appelle la fonction recovery(). Il s'agit d'un moyen efficace de détecter et de gérer les paniques car la fonction recovery() sera exécutée même si une panique se produit avant que la fonction englobante ne reprenne l'exécution.

Scénario B : différer la récupération()

Dans ce scénario, la fonction recovery() elle-même est planifiée comme fonction différée. Cependant, cela ne fonctionne pas comme prévu car recovery() ne s'appelle pas. Par conséquent, toute panique qui se produit avant que la fonction englobante ne reprenne l'exécution ne sera pas interceptée par cet appel différé.

Ce comportement est documenté dans la documentation Go : "Si recovery est appelé en dehors de la fonction différée, il n'arrêtera pas un séquence de panique."

Un exemple intéressant : defer (func() { recovery() })()

Pour illustrer cela davantage, considérons le code suivant :

var recover = func() { recover() }
defer recover()
panic("panic")
Copier après la connexion

Étonnamment, ce code ne panique pas non plus. Dans ce cas, nous créons une variable de récupération de type fonction et l'initialisons avec une fonction anonyme qui appelle la fonction recovery() intégrée. Nous spécifions ensuite la valeur de la variable de récupération comme fonction différée. Cela nous permet d'attraper et de gérer la panique car la fonction différée appelle efficacement recovery(), arrêtant ainsi la séquence de panique.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal