遅延呼び出し引数の評価について
Go では、「defer」ステートメントは、呼び出しの最後に特定のアクションが確実に実行されるようにするためによく使用されます。周囲の関数。ただし、遅延呼び出しに渡された引数はすぐには実行されないことに注意することが重要です。
Go 仕様によると、「'defer' ステートメントが実行されるたびに、関数の値とパラメーターが呼び出しに渡されます」通常どおり評価され、新たに保存されますが、実際の関数は呼び出されません。
詳しく説明すると、遅延される関数 (「遅延関数」) とそれに関連する関数です。パラメータはすぐに評価されます。ただし、遅延関数の実際の実行は、周囲の関数が完了するまで遅延されます。
例の説明
次の Go コードを考えてみましょう。
func def(s string) func() { fmt.Println("tier up") fmt.Println(s) return func(){ fmt.Println("clean up") } } func main() { defer def("defered line")() fmt.Println("main") }
この例:
したがって、遅延関数呼び出しの引数 (この場合は「遅延行」) は、defer ステートメントが実行されるとすぐに評価され、後で実行できるように関数とその引数を設定します。
以上がGo は遅延関数呼び出しの引数評価をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。