La justification derrière "()" Dans les corps de fermeture dans Go
dans Go, l'ajout de "()" après un corps de fermeture n'est pas spécifique aux fermetures mais s'applique plutôt à tout appel de fonction dans une déclaration de déferme. Les spécifications du langage obligent que l'expression dans une instruction de différence doit toujours être un appel de fonction.
Considérez l'exemple:
defer f()
Cette expression tente de reporter l'exécution de la fonction F elle-même, ce qui n'a pas de sens. Au lieu de cela, la syntaxe correcte est:
defer f()()
Ceci construit une fermeture qui capture le contexte actuel et exécute la fonction f lorsque l'instruction de report est activée. Les parenthèses externes exécutent immédiatement la fermeture, garantissant que l'appel de fonction a lieu après l'exécution de l'instruction de différence.
Cette syntaxe est cohérente avec l'utilisation générale des appels de fonction dans Go, qui nécessitent toujours des parenthèses pour les exécuter. Par exemple, pour imprimer la valeur de i au moment où la fermeture est définie, utilisez la syntaxe suivante:
defer func(n int) { fmt.Println(n) }(i)
Inversement, pour imprimer la valeur de I au moment où la fermeture est exécutée, utilisation:
defer func() { fmt.Println(i) }()
Finc () {) fmt.println (i)} ()
Comprendre ce principe permet une compréhension claire du comportement des déclarations de report dans Go et l'utilisation correcte de "()" dans les corps de fermeture et au-delà.
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