Maison > développement back-end > Golang > Comment Go gère-t-il l'évaluation des arguments d'appel de fonction différée ?

Comment Go gère-t-il l'évaluation des arguments d'appel de fonction différée ?

DDD
Libérer: 2024-12-10 06:57:16
original
735 Les gens l'ont consulté

How Does Go Handle Deferred Function Call Argument Evaluation?

Comprendre l'évaluation des arguments d'appel différé

Dans Go, l'instruction « différer » est souvent utilisée pour garantir que des actions spécifiques sont prises à la fin de une fonction environnante. Cependant, il est important de noter que les arguments passés à l'appel différé ne sont pas exécutés immédiatement.

Selon la Go Spec, "chaque fois qu'une instruction 'defer' s'exécute, la valeur de la fonction et les paramètres de l'appel sont évaluées comme d'habitude et enregistrées à nouveau mais la fonction réelle n'est pas invoquée."

Pour élaborer, la fonction à différer (la "fonction différée") et ses paramètres associés sont évalués immédiatement. Cependant, l'exécution réelle de la fonction différée est retardée jusqu'à ce que la fonction environnante se termine.

Explication de l'exemple

Considérez le code Go suivant :

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

Dans cet exemple :

  • La valeur de la fonction différée (def("defered line")) est évaluée, ce qui implique d'appeler def avec l'argument "ligne différée". Ceci imprime "tier up" et l'argument.
  • La valeur de retour de def, qui est une fonction anonyme, est différée mais pas encore exécutée.
  • Le code restant dans main (fmt.Println ("main")) est exécuté.
  • Une fois main renvoyée, la fonction différée est exécutée, imprimant "clean up".

Par conséquent, les arguments de l'appel de fonction différé (« ligne différée » dans ce cas) sont évalués immédiatement lorsque l'instruction defer est exécutée, configurant la fonction et ses arguments pour une exécution ultérieure.

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