Klammern des Abschlusskörpers in Go
In Go kann es verwirrend sein, die Verwendung von Klammern nach dem Körper eines Abschlusses zu verstehen. Lassen Sie uns tiefer in dieses Konzept eintauchen, indem wir zwei Beispiele untersuchen.
Funktionsliterale:
Im Funktionsliteral-Beispiel:
func(ch chan int) { ch <- ACK }(replyChan)
Die Klammern sofort Rufen Sie nach dem Abschlusstext (replyChan) das Funktionsliteral auf und übergeben Sie das Argument ReplyChan an it.
Defer-Anweisungen:
Im Beispiel der Defer-Anweisung:
func f() (result int) { defer func() { result++ }() // why and how? return 0 }
Die Klammern nach dem Abschlusskörper () sind nicht vorhanden beziehen sich ausschließlich auf Abschlüsse, sind aber Teil der Defer-Anweisungssyntax. Gemäß den Go-Sprachspezifikationen muss der Ausdruck in einer Defer-Anweisung immer ein Funktionsaufruf sein. Daher sind die Klammern erforderlich, um anzuzeigen, dass der Abschluss sofort aufgerufen wird.
Bedeutung der Funktionsaufrufsyntax:
In Go gibt es einen deutlichen Unterschied zwischen einer Funktion Wert und einen Funktionsaufruf. Ein Funktionswert bezieht sich auf die eigentliche Funktionsdefinition, während ein Funktionsaufruf die Ausführung der Funktion darstellt.
Betrachten Sie den folgenden Code:
func f() int { return 42 } a := f // function value b := f() // function call
In der ersten Zeile wird a zugewiesen Funktionswert von f, während in der zweiten Zeile b das Ergebnis des Aufrufs von f zugewiesen wird.
Ebenso muss der Ausdruck in einer Defer-Anweisung ein Funktionsaufruf sein, nicht nur ein Funktionswert. Daher sind die Klammern erforderlich, um den Funktionsaufruf anzuzeigen.
Zusätzlicher Hinweis:
Die Klammern können auch eine Ausdrucksliste umfassen, einschließlich einer leeren Liste. Diese Unterscheidung ist wichtig, da sie bestimmt, wann und mit welchen Argumenten der Abschluss ausgeführt wird.
Das obige ist der detaillierte Inhalt vonWann sind Klammern nach einem Go-Closure-Körper erforderlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!