"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > La récupération de la panique peut-elle modifier les variables locales dans les littéraux de fonctions en Go?

La récupération de la panique peut-elle modifier les variables locales dans les littéraux de fonctions en Go?

Publié le 2025-03-22
Parcourir:529

Can Panic Recovery Modify Local Variables in Function Literals in Go?

La récupération de la panique peut-elle modifier les variables locales dans les littéraux de fonction?

Dans Go, lorsque vous travaillez avec des valeurs de retour nommées, vous pouvez utiliser une instruction de différence pour modifier les valeurs avant de les retourner. Cependant, ce comportement n'est pas cohérent lors de l'utilisation de variables locales dans les littéraux de fonction.

Considérez le code suivant:

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
}

func bar() {
    panic("panic happened")
}

Ce code fonctionne comme prévu, la définition du résultat à -1 et erre sur un message d'erreur personnalisé après avoir récupéré d'une panique. Cependant, si nous utilisons des variables locales dans la fonction littérale, le comportement change:

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
}

func bar() {
    panic("panic happened")
}

Dans ce cas, le résultat est réinitialisé à 0 au lieu de -1. En effet, l'instruction de déférer dans la fonction littérale ne peut pas accéder ou modifier les valeurs de retour nommées car elles ne sont plus dans la portée.

conformément à la documentation GO, "... Si la fonction différée est une fonction littérale et la fonction environnante a nommé les paramètres de résultat avant qu'ils soient retournés dans le lital, la fonction de différé peut accéder et modifier le résultat est le résultat avant d'être renvoyé." " Crucial pour utiliser les valeurs de retour nommées lorsque vous essayez de les modifier à l'aide d'une instruction de différence dans un littéral de fonction. Les variables locales dans de tels cas ne peuvent pas être consultées ou modifiées.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3