Dalam Go, fungsi tertunda dilaksanakan apabila fungsi kembali, walaupun fungsi panik. Walau bagaimanapun, apakah yang berlaku kepada fungsi tertunda apabila atur cara ditamatkan disebabkan oleh panggilan ke log.Fatalln()?
Fungsi log.Fatalln() digunakan untuk log ralat dan kemudian menamatkan program. Ia bersamaan dengan log panggilan.Print() diikuti oleh panggilan ke os.Exit(1).
os.Exit() menyebabkan atur cara untuk keluar dengan segera. Ini penting kerana:
log.Fatal calls os.Exit os.Exit does not run deferred functions
Oleh itu, sebarang fungsi tertunda yang ditakrifkan selepas panggilan untuk log.Fatalln() tidak dipanggil.
Berikut ialah contoh untuk menunjukkan tingkah laku ini:
import ( "log" "os" ) func main() { f, _ := os.Create("foo.txt") defer f.Close() log.Fatalln("Error") }
Dalam contoh ini, program cuba membuka dan menutup fail menggunakan fungsi tertunda. Walau bagaimanapun, fail itu tidak pernah ditutup kerana atur cara ditamatkan oleh panggilan untuk log.Fatalln().
Jika anda perlu menutup sumber dengan betul atau melakukan tindakan pembersihan sebelum program keluar , elakkan menggunakan log.Fatalln(). Sebaliknya, tangani ralat dengan anggun dan pastikan fungsi tertunda dilaksanakan dengan betul.
Atas ialah kandungan terperinci Adakah Fungsi Tertunda Melaksanakan Selepas `log.Fatalln()` Panggilan Masuk Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!