Comprendre les affectations de variables locales dans Panic Recovery avec Go
Panic Recovery dans Go vous permet de gérer les erreurs d'exécution avec élégance, mais une idée fausse courante surgit lors de l'utilisation de variables locales dans la fonction de récupération.
Récupération de panique de valeur de retour nommée
Lorsqu'il s'agit de valeurs de retour nommées, la fonction de récupération a accès à ces variables avant qu'elles ne soient est revenu. Cela vous permet de leur attribuer des valeurs dans la fonction defer :
<code class="go">func foo() (result int, err error) { defer func() { if e := recover(); e != nil { result = -1 err = errors.New(e.(string)) } }() bar() result = 100 err = nil return }</code>
Affectation de variables locales dans Panic Recovery
Cependant, lors de l'utilisation de variables locales avec des valeurs de retour sans nom , ce comportement diffère. Les variables locales sont créées sur la pile et initialisées avec des valeurs nulles lors de la saisie de la fonction. Si la panique se produit avant leur attribution, ils conserveront leurs valeurs nulles.
<code class="go">func foo() (int, error) { var result int var err error defer func() { if e := recover(); e != nil { result = -1 err = errors.New(e.(string)) } }() bar() result = 100 err = nil return result, err }</code>
Dans cet exemple, result et err sont initialisés à 0 et nil, respectivement. Lorsque la panique se produit avant qu'une affectation ne soit effectuée, ces valeurs nulles sont renvoyées. En conséquence, le résultat sera :
result: 0
Différences clés
Les valeurs de retour nommées sont traitées comme des variables nommées, permettant à la fonction defer de les modifier directement. Les variables locales, en revanche, sont stockées sur la pile et ne sont pas accessibles à la fonction de report tant qu'elles ne sont pas affectées.
Conclusion
Lors de la récupération d'une panique avec variables locales, il est crucial de comprendre que les variables locales ne sont pas initialisées tant qu'elles ne sont pas affectées. Par conséquent, si une panique survient avant les affectations, celles-ci conserveront leurs valeurs nulles et affecteront les valeurs renvoyées.
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!