Maison > développement back-end > Golang > Qu'arrive-t-il aux arguments de fonction différée dans Go ?

Qu'arrive-t-il aux arguments de fonction différée dans Go ?

DDD
Libérer: 2024-12-20 12:37:11
original
592 Les gens l'ont consulté

What Happens to Deferred Function Arguments in Go?

Évaluation des arguments de fonction différée

Question : Une citation dans The Tour of Go indique que « les arguments de l'appel différé sont évalués immédiatement. Qu'est-ce que cela signifie et qu'est-ce qui est réellement évalué ?

Réponse :

Dans Go, les instructions defer retardent l'exécution d'une fonction jusqu'au retour de la fonction englobante. Cependant, l'évaluation des arguments de la fonction différée a lieu immédiatement.

Décomposition du processus d'évaluation :

La spécification indique que pour chaque instruction « defer » :

  • Valeur de la fonction : La fonction à différer est évaluée comme habituel.
  • Paramètres : Les paramètres de la fonction différée sont également évalués immédiatement.

L'appel de fonction réel n'est exécuté qu'après le retour de la fonction environnante.

Exemple :

Considérez ce qui suit code :

func def(s string) func() {
    fmt.Println("tier up")
    fmt.Println(s)
    return func() { fmt.Println("clean up") }
}

func main() {
    defer def("defered line")()
    fmt.Println("main")
}
Copier après la connexion

Séquence d'évaluation :

  1. def() Évaluation des arguments : Le paramètre "ligne différée" est évalué immédiatement .
  2. Evaluation de la fonction def() : La fonction def() est appelée, imprimant "niveau supérieur" et "ligne différée".
  3. Évaluation de fonction différée : La valeur de retour de def() est évaluée, qui est une fonction qui imprime "nettoyer".
  4. Exécution de fonction différée : Lorsque main() revient, la fonction différée est exécutée, affichant "clean up."

Conclusion :

Lorsqu'une instruction defer est utilisée, les paramètres de la fonction différée sont évalués immédiatement. Ce processus garantit que la fonction a accès aux valeurs les plus récentes des variables lors de son exécution. Cependant, l'exécution réelle de la fonction différée est retardée jusqu'au retour de la fonction environnante.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal