ホームページ > バックエンド開発 > Golang > Go の `defer` ステートメントでクロージャ本体の後に「( )」を使用するのはなぜですか?

Go の `defer` ステートメントでクロージャ本体の後に「( )」を使用するのはなぜですか?

Barbara Streisand
リリース: 2024-12-02 18:55:11
オリジナル
691 人が閲覧しました

Why Use

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 ステートメントの動作と、クロージャ本体内での "( )" の正しい使用法を明確に理解できるようになります。超えてください。

以上がGo の `defer` ステートメントでクロージャ本体の後に「( )」を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート