defer recovery() vs. defer func() { recovery() }()
Q : Pourquoi un appel à defer func () { recovery() }() a réussi à récupérer une goroutine paniquée, alors qu'un appel à différer recovery() ne le fait pas ?
R : Comme indiqué dans la documentation officielle de recovery():
"Si recovery est appelé en dehors de la fonction différée, cela n'arrêtera pas une séquence de panique."
Dans le cas de defer recovery(), recovery() est la fonction différée lui-même. Une fois exécuté, recovery() ne s'appelle pas. Par conséquent, il ne parvient pas à arrêter la séquence de panique.
Si recovery() pouvait s'appeler, cela arrêterait la panique. Cependant, ce scénario n'est pas réalisable.
Considérations supplémentaires :
Le code suivant évite également de paniquer :
package main func main() { var recover = func() { recover() } defer recover() panic("panic") }
Dans ce cas, un La variable nommée recovery de type fonction est créée pour stocker une fonction anonyme qui appelle la fonction intégrée recovery(). La fonction différée est ensuite définie pour appeler la valeur de la variable de récupération. Cela arrête avec succès la séquence de panique en appelant indirectement la fonction recovery().
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!