La justification derrière "( )" dans les corps de fermeture en 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 instruction defer. Les spécifications du langage exigent que l'expression dans une instruction defer doit toujours être un appel de fonction.
Considérons l'exemple :
defer f()
Cette expression tente de différer 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 defer est activée. Les parenthèses extérieures exécutent la fermeture immédiatement, garantissant que l'appel de fonction a lieu après l'exécution de l'instruction defer.
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)
À l'inverse, pour imprimer la valeur de i au moment où la fermeture est exécutée, utilisez :
defer func() { fmt.Println(i) }()
Comprendre ce principe permet de comprendre clairement le comportement des instructions defer dans Go et l'utilisation correcte de "( )" dans les corps de fermeture et au-delà.
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!