ホームページ  >  記事  >  バックエンド開発  >  golang defer はいつ実行されますか?

golang defer はいつ実行されますか?

(*-*)浩
(*-*)浩オリジナル
2019-12-03 10:00:452589ブラウズ

golang defer はいつ実行されますか?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。