Maison > développement back-end > Golang > Quand les parenthèses sont-elles requises après un corps de fermeture Go ?

Quand les parenthèses sont-elles requises après un corps de fermeture Go ?

DDD
Libérer: 2024-12-09 02:56:10
original
1020 Les gens l'ont consulté

When Are Parentheses Required After a Go Closure Body?

Parenthèses de corps de fermeture en Go

En Go, comprendre l'utilisation des parenthèses après le corps d'une fermeture peut être déroutant. Approfondissons ce concept en examinant deux exemples.

Littéraux de fonction :

Dans l'exemple de littéral de fonction :

func(ch chan int) { ch <- ACK }(replyChan)
Copier après la connexion

Les parenthèses immédiatement après le corps de fermeture (replyChan), invoquez la fonction littérale et transmettez l'argument ReplyChan à it.

Déclarations différées :

Dans l'exemple d'instruction différée :

func f() (result int) {
    defer func() {
        result++
    }() // why and how?
    return 0
}
Copier après la connexion

Les parenthèses après le corps de fermeture, (), ne sont pas exclusivement liés aux fermetures mais font partie de la syntaxe de l'instruction defer. Selon les spécifications du langage Go, l'expression dans une instruction defer doit toujours être un appel de fonction. Par conséquent, il faut que les parenthèses indiquent que la fermeture est invoquée immédiatement.

Importance de la syntaxe d'appel de fonction :

En Go, il existe une différence nette entre une fonction valeur et un appel de fonction. Une valeur de fonction fait référence à la définition réelle de la fonction, tandis qu'un appel de fonction représente l'exécution de la fonction.

Considérez le code suivant :

func f() int { return 42 }

a := f // function value
b := f() // function call
Copier après la connexion

Dans la première ligne, a se voit attribuer le valeur de fonction de f, tandis que dans la deuxième ligne, b se voit attribuer le résultat de l'invocation de f.

De même, dans une instruction différée, l'expression doit être un appel de fonction, et non juste une valeur de fonction. Par conséquent, les parenthèses sont nécessaires pour indiquer l'invocation de la fonction.

Remarque supplémentaire :

Les parenthèses peuvent également englober une liste d'expressions, y compris une liste vide. Cette distinction est importante car elle détermine quand la fermeture s'exécute et avec quels arguments.

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