Die Begründung hinter "()" In Closinure Körper in Go
In Go, die Hinzufügung von "()" nach einem Schließungskörper gilt nicht spezifisch für Schließungen, sondern gilt für jeden Funktionsanruf in einer Defer -Anweisung. Die Sprachspezifikationen schreibt vor, dass der Ausdruck in einer Aufschubanweisung immer ein Funktionsanruf sein muss.
Betrachten Sie das Beispiel:
defer f()
. Dieser Ausdruck versucht, die Ausführung der Funktion für die Funktion zu verschieben, was keinen Sinn ergibt. Stattdessen ist die korrekte Syntax:
defer f()()
Dies konstruiert einen Verschluss, der den aktuellen Kontext erfasst und die Funktion f ausführt, wenn die Aufschubanweisung aktiviert wird. Die äußeren Klammern führen die Schließung sofort aus und stellen Sie sicher, dass der Funktionsaufruf nach der Ausführung der Aufschubanweisung erfolgt.
Diese Syntax steht im Einklang mit der allgemeinen Verwendung von Funktionsaufrufen in Go, bei denen immer Klammern sie ausgeführt werden müssen. Verwenden Sie zum Zeitpunkt der Definition des Wertes von I zum Zeitpunkt der Definition der folgenden Syntax:
defer func(n int) { fmt.Println(n) }(i)
Gegenteil, zum Zeitpunkt der Zeit, die der Abschluss des Abschlusses verwendete, wird ausgeführt. fmt.println (i)} ()
defer func() { fmt.Println(i) }()
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3