Log.Fatalln と遅延関数の実行
Go プログラムでは、外側の関数が返されると、遅延関数が自動的に呼び出されます。ただし、一般的な疑問が生じます: log.Fatalln 関数が呼び出されたときに遅延関数は実行されますか?
log.Fatalln について
log.Fatalln 関数はメンバーです標準の Go ロギング パッケージの。提供されたメッセージをログに記録し、すぐに os.Exit(1) を呼び出してプログラムを終了します。 os.Exit 関数は、遅延関数の実行を防ぎます。
log.Fatalln の場合の遅延関数の実行
したがって、質問はいいえです。 log.Fatalln が呼び出された場合、遅延関数は実行されません。これは、log.Fatalln が遅延関数の実行をバイパスしてプログラムを突然終了するためです。
この動作は、log.Fatalln:
Fatal is equivalent to Print() followed by a call to os.Exit(1).と同等の関数である log.Fatal の説明に文書化されています。
実践的なデモンストレーション
次のコード
db, err := sql.Open("postgres", "…") if err != nil { log.Fatalln(err) } defer db.Close() tpl, err := template.ParseGlob("") if err != nil { log.Fatalln(err) }
template.ParseGlob("") がエラーを返した場合、log.Fatalln がその行に到達する前にプログラムを終了するため、db.Close() への呼び出しは実行されません。
代替アプローチ
クリーンアップ タスクを確実に実行する必要がある場合プログラムが終了する前に実行される場合は、プログラムを終了しない他のログ機能 (log.Print や log.Println など) の使用を検討する必要があります。
以上が遅延関数は Go の `log.Fatalln` の後に実行されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。