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