Rumah > pembangunan bahagian belakang > Golang > Adakah Fungsi Tertunda Melaksanakan Selepas `log.Fatalln()` dalam Go?

Adakah Fungsi Tertunda Melaksanakan Selepas `log.Fatalln()` dalam Go?

Patricia Arquette
Lepaskan: 2024-11-28 22:09:12
asal
874 orang telah melayarinya

Do Deferred Functions Execute After `log.Fatalln()` in 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)
}
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan