Golang には defer という特別な制御ステートメントがあり、リソースの解放など、指定された関数の呼び出しを遅らせるために使用されます。関数の終わりですが、Return の前に、、コードを簡単に理解しましょう: (推奨学習: Go )
package main func main() { test() }func test() { println("test1") defer func() { println("defer test2") }() println("test3") }
## 実行結果は次のとおりです。 : ## 在##遅延を伴う関数が最後に実行されることは明らかです
コードを変更して、コードをパニックにします。例外がスローされると、遅延遅延関数は実行されますか?まだ処刑されるの?
test1 test3 defer test2出力
package main func main() { test() }func test() { println("test1") panic("panic") defer func() { println("defer test2") }() println("test3") }遅延関数が実行されません。これはなぜですか?これは、panic が遅延関数の前にあるためです。次のようにコードを変更します。
test1
panic: panic
Process finished with exit code 2
出力
package main func main() { test() }func test() { println("test1") defer func() { println("defer test2") }() panic("panic") println("test3") }遅延関数が実行され、次のようになります。パニック 遅延された関数は遅延された関数の前に実行できません。結局、例外がスローされます。
以上がgolang defer はいつ実行されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。