Rumah >pembangunan bahagian belakang >Golang >Adakah Fungsi Tertunda Melaksanakan Selepas `log.Fatalln()` dalam Go?
Pelaksanaan Fungsi Tertunda dengan log.Fatalln()
Dalam Go, fungsi tertunda dilaksanakan apabila fungsi sekeliling kembali, walaupun ia keluar disebabkan panik atau os.Exit(). Walau bagaimanapun, terdapat pengecualian kepada peraturan ini.
log.Fatalln() dan Fungsi Tertunda
Apabila atur cara memanggil fungsi log.Fatalln(), ia mencetak mesej ralat dan kemudian segera keluar dari program dengan kod keluar 1. Yang penting, log.Fatalln() memanggil os.Exit(), yang menghalang kod selebihnya daripada dilaksanakan.
Implikasi untuk Fungsi Tertunda
Ini bermakna jika fungsi tertunda didaftarkan selepas panggilan untuk log.Fatalln(), ia tidak akan dilaksanakan. Ini kerana os.Exit() menamatkan atur cara serta-merta, tanpa memberi masa jalan peluang untuk menjalankan fungsi tertunda.
Demonstrasi
Pertimbangkan kod berikut:
db, err := sql.Open("postgres", "…") if err != nil { log.Fatalln(err) } defer db.Close() tpl, err := template.ParseGlob("") if err != nil { log.Fatalln(err) }
Dalam contoh ini, jika panggilan log.Fatalln() pertama dilaksanakan kerana ralat pembukaan sambungan pangkalan data, fungsi tertunda db.Close() tidak akan dipanggil kerana program keluar serta-merta selepas panggilan log.Fatalln().
Alternatif untuk log.Fatalln()
Jika anda perlu mengeluarkan sumber dengan betul atau melaksanakan tugas lain sebelum program keluar, anda tidak seharusnya menggunakan log.Fatalln(). Sebaliknya, anda boleh menggunakan log.Println() atau mencetak mesej ralat ke aliran ralat standard dan kemudian panggil os.Exit() secara manual.
Atas ialah kandungan terperinci Adakah Fungsi Tertunda Melaksanakan Selepas `log.Fatalln()` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!