Go では、"defer" ステートメントを使用すると、関数が関数呼び出しの実行を延期できるようになります。周囲の関数が戻ります。この動作は、defer ステートメントがクロージャのパラメータをキャプチャするときに予期しない結果を引き起こす可能性があります。
パート 2 とパート 3: キャプチャされたパラメータ
次のコードを考えてみましょう:
パート 2:
「パート 2」では、defer ステートメントは変数「i」をキャプチャするクロージャを作成します。クロージャーが実行されると、「i」変数には、range ステートメントの最後の反復での値 (4) が含まれます。したがって、出力は「44444」となります。
パート 3:
「パート 3」では、defer ステートメントは外部変数をキャプチャしないクロージャを作成します。クロージャの "n" パラメータは defer ステートメントの実行時に評価され、その時点で "i" の値を受け取ります。各遅延関数呼び出しでは「n」に異なる値が使用されるため、目的の出力「43210」が得られます。
キーポイント:
Go での予期せぬ結果を回避するには、defer ステートメントのキャプチャ動作を理解することが重要です。コード。
以上がGo の `defer` ステートメントはクロージャパラメータをどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。