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
DDDoriginal
2024-12-20 12:37:11588parcourir

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")
}

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!

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