Maison > développement back-end > Golang > Pourquoi utiliser « ( ) » après la fermeture des corps dans les instructions « defer » de Go ?

Pourquoi utiliser « ( ) » après la fermeture des corps dans les instructions « defer » de Go ?

Barbara Streisand
Libérer: 2024-12-02 18:55:11
original
753 Les gens l'ont consulté

Why Use

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()
Copier après la connexion

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()()
Copier après la connexion

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)
Copier après la connexion

À l'inverse, pour imprimer la valeur de i au moment où la fermeture est exécutée, utilisez :

defer func() { fmt.Println(i) }()
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal