ホームページ >バックエンド開発 >Golang >Go では遅延関数は「log.Fatalln()」の後に実行されますか?

Go では遅延関数は「log.Fatalln()」の後に実行されますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-28 22:09:12768ブラウズ

Do Deferred Functions Execute After `log.Fatalln()` in Go?

log.Fatalln() による遅延関数の実行

Go では、周囲の関数が終了した場合でも、周囲の関数が返されると遅延関数が実行されます。パニックまたは os.Exit() が原因です。ただし、この規則には例外があります。

log.Fatalln() および遅延関数

プログラムが log.Fatalln() 関数を呼び出すと、エラー メッセージが表示され、終了コード 1 でプログラムが直ちに終了します。重要なのは、log.Fatalln() は os.Exit() を呼び出します。これにより、残りのコードの実行が妨げられます。

遅延関数の影響

これは、log.Fatalln() の呼び出し後に遅延関数が登録された場合、実行されません。これは、os.Exit() がランタイムに遅延関数を実行する機会を与えずにプログラムを直ちに終了するためです。

デモ

次のコードを考えてみましょう。

db, err := sql.Open("postgres", "…")
if err != nil {
    log.Fatalln(err)
}
defer db.Close()

tpl, err := template.ParseGlob("")
if err != nil {
    log.Fatalln(err)
}

この例では、最初の log.Fatalln() 呼び出しが次の理由で実行された場合、データベース接続を開くときにエラーが発生した場合、プログラムは log.Fatalln() 呼び出しの直後に終了するため、遅延関数 db.Close() は呼び出されません。

log.Fatalln()

プログラムが終了する前にリソースを適切に解放したり、他のタスクを実行したりする必要がある場合は、使用しないでください。 log.Fatalln()。代わりに、log.Println() を使用するか、標準エラー ストリームにエラー メッセージを出力して、手動で os.Exit() を呼び出すことができます。

以上がGo では遅延関数は「log.Fatalln()」の後に実行されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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