Die Begründung hinter „( )“ in Abschlusskörpern in Go
In Go das Hinzufügen von „( )“ nach einem Abschlusskörper ist nicht spezifisch für Abschlüsse, sondern gilt für jeden Funktionsaufruf innerhalb einer Defer-Anweisung. Die Sprachspezifikationen schreiben vor, dass der Ausdruck in einer Defer-Anweisung immer ein Funktionsaufruf sein muss.
Betrachten Sie das Beispiel:
defer f()
Dieser Ausdruck versucht, die Ausführung der Funktion f selbst zu verzögern. was keinen Sinn ergibt. Stattdessen lautet die korrekte Syntax:
defer f()()
Dadurch wird ein Abschluss erstellt, der den aktuellen Kontext erfasst und die Funktion f ausführt, wenn die Defer-Anweisung aktiviert wird. Die äußeren Klammern führen den Abschluss sofort aus und stellen so sicher, dass der Funktionsaufruf nach der Ausführung der Defer-Anweisung erfolgt.
Diese Syntax steht im Einklang mit der allgemeinen Verwendung von Funktionsaufrufen in Go, die für ihre Ausführung immer Klammern erfordern. Um beispielsweise den Wert von i zum Zeitpunkt der Definition des Abschlusses auszugeben, verwenden Sie die folgende Syntax:
defer func(n int) { fmt.Println(n) }(i)
Umgekehrt verwenden Sie zum Ausdrucken des Werts von i zum Zeitpunkt der Ausführung des Abschlusses:
defer func() { fmt.Println(i) }()
Das Verständnis dieses Prinzips ermöglicht ein klares Verständnis des Verhaltens von Defer-Anweisungen in Go und der korrekten Verwendung von „( )“ innerhalb von Abschlusskörpern und darüber hinaus.
Das obige ist der detaillierte Inhalt vonWarum sollte „( )' nach Abschlusskörpern in den „defer'-Anweisungen von Go verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!