Comportement de Recover() dans les fonctions différées imbriquées
Dans Go, panic() et recovery() sont utilisés pour gérer les erreurs d'exécution . Cependant, les erreurs récupérables doivent être gérées par des fonctions différées.
Cas simple :
Dans un scénario simple de fonction différée, recovery() fonctionne comme prévu :
package main import "fmt" func printRecover() { r := recover() fmt.Println("Recovered:", r) } func main() { defer printRecover() panic("OMG!") }
Cas différé imbriqué :
Lorsque printRecover() est enveloppé dans une fonction différée imbriquée :
func main() { defer func() { printRecover() }() panic("OMG!") }
le comportement change. recovery() dans printRecover() renvoie zéro. En effet :
Selon la spécification Go :
La valeur de retour de recovery() est nulle si recovery() n'a pas été appelée directement par une fonction différée.
Dans le cas imbriqué, printRecover() est appelée par la fonction différée imbriquée, et non directement par la fonction initiale un.
Conclusion :
Pour que recovery() fonctionne dans des fonctions différées imbriquées, elle doit être appelée directement par la fonction différée qui gère la panique. Lorsque cette condition n'est pas remplie, recovery() retournera nul.
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!