Go のクロージャ本体の "( )" の根拠
Go では、クロージャ本体の後に "( )" を追加しますこれはクロージャに固有のものではなく、defer ステートメント内のすべての関数呼び出しに適用されます。言語仕様では、defer ステートメント内の式は常に関数呼び出しでなければならないと規定されています。
次の例を考えてみましょう。
defer f()
この式は、関数 f 自体の実行を延期しようとしています。それは意味がありません。代わりに、正しい構文は次のとおりです。
defer f()()
これは、現在のコンテキストをキャプチャするクロージャを構築し、defer ステートメントがアクティブ化されたときに関数 f を実行します。外側の括弧はクロージャをすぐに実行し、defer ステートメントの実行後に関数呼び出しが確実に行われるようにします。
この構文は、Go での関数呼び出しの一般的な使用法と一致しており、関数呼び出しを実行するには常に括弧が必要です。たとえば、クロージャの定義時に i の値を出力するには、次の構文を使用します。
defer func(n int) { fmt.Println(n) }(i)
逆に、クロージャの実行時に i の値を出力するには、
defer func() { fmt.Println(i) }()
以上がGo の `defer` ステートメントでクロージャ本体の後に「( )」を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。