ホームページ > バックエンド開発 > Golang > Go 遅延呼び出し: 引数はすぐに評価されますか、それとも関数の実行時に評価されますか?

Go 遅延呼び出し: 引数はすぐに評価されますか、それとも関数の実行時に評価されますか?

Mary-Kate Olsen
リリース: 2024-12-06 00:44:11
オリジナル
574 人が閲覧しました

Go Deferred Calls: Are Arguments Evaluated Immediately or Upon Function Execution?

遅延呼び出しの引数: 即時評価と関数の実行

Go では、遅延関数呼び出しを使用すると、周囲の関数が戻った後にコードを実行できます。ただし、引数の処理方法を理解していないと、遅延呼び出しの動作は混乱する可能性があります。

評価と実行

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

When main()

  1. defer ステートメントは、定数文字列「defered line」である def への引数を評価します。
  2. def 関数は「defered line」で呼び出されます。 ," print "tier up" and "defered line".
  3. def の戻り値は、"clean up" を出力する関数です。この関数はまだ実行されていません。
  4. main() は「main」を出力します。
  5. main() が戻ると、遅延関数が実行され、「clean up」を出力します。

結論

Go で遅延呼び出しを効果的に使用するには、引数の評価と関数の実行の違いを理解することが重要です。引数は defer ステートメントが実行されるとすぐに評価されますが、関数本体は外側の関数が返されたときにのみ実行されます。これにより、アクションが実行される順序を制御し、予期しない関数の動作に関連する潜在的な問題を回避できます。

以上がGo 遅延呼び出し: 引数はすぐに評価されますか、それとも関数の実行時に評価されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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