La question :
Pourquoi un appel pour différer la fonction ( ) { recovery() }() récupère avec succès une goroutine paniquée, mais un appel pour différer recovery() non ?
La réponse :
Selon la documentation de recovery(), "Si recovery est appelé en dehors de la fonction différée, il sera pas arrêter une séquence de panique."
Dans le cas de defer recovery(), recovery() lui-même est le fonction différée. Par conséquent, il ne s'appelle pas, ce qui entraîne une séquence de panique continue.
Si recovery() devait s'appeler comme fonction différée, elle arrêterait la séquence de panique. Cependant, cela serait illogique.
Une variante intéressante :
Le code suivant évite également la panique :
package main func main() { var recover = func() { recover() } defer recover() panic("panic") }
Ici, on crée une variable de récupération avec une valeur de fonction qui appelle la fonction intégrée recovery(). En différant l'appel à la valeur de cette variable, nous invoquons la fonction intégrée recovery(), qui arrête alors 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!