ホームページ > バックエンド開発 > Golang > Go では遅延関数の引数はどうなりますか?

Go では遅延関数の引数はどうなりますか?

DDD
リリース: 2024-12-20 12:37:11
オリジナル
592 人が閲覧しました

What Happens to Deferred Function Arguments in Go?

遅延関数の引数の評価

質問: The Tour of Go の引用では、「遅延呼び出しの引数」と述べられています。すぐに評価されます。」これは何を意味し、実際に何が評価されるのでしょうか?

答え:

Go では、defer ステートメントは、囲んでいる関数が戻るまで関数の実行を遅らせます。ただし、遅延関数の引数の評価はすぐに行われます。

評価プロセスの詳細:

仕様では、各 "defer" ステートメントについて次のように述べられています。

  • 関数の値: 遅延される関数は次のように評価されます。通常。
  • パラメータ: 遅延関数のパラメータもすぐに評価されます。

実際の関数呼び出しは、周囲の関数が返されるまで実行されません。

例:

次のように考えます。コード:

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")
}
ログイン後にコピー

評価シーケンス:

  1. def() 引数の評価: パラメータ「defered line」はすぐに評価されます.
  2. def() 関数評価: def() 関数が呼び出され、「階層化」と「遅延行」が出力されます。
  3. 遅延関数の評価: def() の戻り値が評価され、これは、「クリーンアップ」を出力する関数です。
  4. 遅延関数の実行: の場合main() が返され、遅延関数が実行され、「clean up」が出力されます。

結論:

defer ステートメントが使用される場合、遅延関数はすぐに評価されます。このプロセスにより、関数は実行時に変数の最新の値にアクセスできるようになります。ただし、遅延関数の実際の実行は、周囲の関数が戻るまで遅延されます。

以上がGo では遅延関数の引数はどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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