Maison >développement back-end >Golang >Comment les variables locales se comportent-elles dans Panic Recovery in Go ?

Comment les variables locales se comportent-elles dans Panic Recovery in Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 14:20:02732parcourir

How Do Local Variables Behave in Panic Recovery in Go?

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!

Déclaration:
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