Go では、defer キーワードは、関数の実行とパラメーターの評価の順序を制御する上で重要な役割を果たします。これにより、通常の実行フローに関係なく、囲んでいる関数が戻る直前に特定のタスクが確実に実行されます。
通常の関数呼び出しとは異なり、遅延関数は、 defer ステートメントが見つかりました。ただし、実際の実行は、囲んでいる関数が戻るまで延期されます。これにより、メイン関数が主な操作を完了した後に特定のアクションを実行できるようになります。
たとえば、次のコード スニペットを考えてみましょう:
<code class="go">defer fmt.Println("...order is 4...Your age is:", getAge(&age)) defer fmt.Println("...order is 3...Your ticket price is:", printTicket(age))</code>
このコードでは、fmt.Println ステートメントは遅延され、そのパラメーターはすぐに評価されます。ただし、実際の印刷は main 関数が戻ったときにのみ行われます。さらに、実行順序が逆になり、最後の遅延ステートメントが最初に実行されます。
遅延プロセスをさらに詳しく説明するために、次のコードを実行してみましょう:
<code class="go">func having() func(string) { fmt.Print("Go ") // evaluation order: 1 return funWithGo } func fun(msg string) string { fmt.Print("have ") // evaluation order: 2 return msg } func funWithGo(msg string) { fmt.Println("fun", msg) // evaluation order: 4 }</code>
出力:
Go have some fun with Go.
この例では、段階的な実行プロセスを観察します:
遅延関数のパラメーターは、関数が実際に実行されるときではなく、defer ステートメントが検出されたときに評価されることに注意することが重要です。これにより、遅延関数が呼び出される前にパラメータが変更されると、予期しない動作が発生する可能性があります。
遅延の使用は、次のようなさまざまなシナリオで有益です。
defer キーワードの評価順序とパラメータの処理は、Go プログラムで効果的に利用するために重要です。この強力な機能を活用することで、開発者はコードの堅牢性、編成性、保守性を強化できます。
以上がDefer は Go でどのように機能するか: 関数の評価とパラメータ処理を理解する?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。