Go では、関数がパニックした場合でも、関数が返されるときに遅延関数が実行されます。ただし、log.Fatalln() の呼び出しによりプログラムが終了した場合、遅延関数はどうなりますか?
log.Fatalln() 関数エラーをログに記録し、プログラムを終了するために使用されます。これは、os.Exit(1).
os.Exit() を呼び出して log.Print() を呼び出すことと同じであり、プログラムが実行されます。すぐに終了します。これは次の理由から重要です。
log.Fatal calls os.Exit os.Exit does not run deferred functions
したがって、log.Fatalln() の呼び出し後に定義された遅延関数は呼び出されません。
これはこの動作を示す例:
import ( "log" "os" ) func main() { f, _ := os.Create("foo.txt") defer f.Close() log.Fatalln("Error") }
この例では、プログラムはファイルを開いたり閉じたりしようとします。遅延関数を使用します。ただし、プログラムは log.Fatalln() の呼び出しによって終了するため、ファイルは決して閉じられません。
プログラムが終了する前にリソースを適切に閉じるか、クリーンアップ アクションを実行する必要がある場合、log.Fatalln() の使用は避けてください。代わりに、エラーを適切に処理し、遅延関数が適切に実行されるようにしてください。
以上がGo で `log.Fatalln()` 呼び出しの後に遅延関数が実行されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。