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

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-04 16:24:16296semak imbas

Do Deferred Functions Execute After `log.Fatalln` in Go?

Log.Fatalln dan Perlaksanaan Fungsi Tertunda

Program Dalam Go, fungsi tertunda dipanggil secara automatik apabila fungsi lampiran kembali. Walau bagaimanapun, persoalan biasa timbul: adakah fungsi tertunda dilaksanakan apabila log.Fungsi Fatalln digunakan?

Memahami log.Fatalln

Fungsi log.Fatalln ialah ahli daripada pakej pengelogan Go standard. Ia log mesej yang disediakan dan kemudian segera memanggil os.Exit(1) untuk menamatkan program. Fungsi os.Exit, seterusnya, menghalang pelaksanaan mana-mana fungsi tertunda.

Perlaksanaan Fungsi Tertunda dalam Kes log.Fatalln

Oleh itu, jawapan kepada soalan ialah tidak. Fungsi tertunda tidak dilaksanakan apabila log.Fatalln dipanggil. Ini kerana log.Fatalln menamatkan atur cara secara tiba-tiba, memintas pelaksanaan fungsi tertunda.

Tingkah laku ini didokumenkan dalam perihalan log.Fatal, fungsi yang setara dengan log.Fatalln:

Fatal is equivalent to Print() followed by a call to os.Exit(1).

Demonstrasi Praktikal

Yang berikut kod menunjukkan tingkah laku ini:

db, err := sql.Open("postgres", "…")
if err != nil {
    log.Fatalln(err)
}
defer db.Close()

tpl, err := template.ParseGlob("")
if err != nil {
    log.Fatalln(err)
}

Jika templat.ParseGlob("") mengembalikan ralat, panggilan ke db.Close() tidak akan dilaksanakan kerana log.Fatalln akan menamatkan atur cara sebelum mencapai baris itu .

Pendekatan Alternatif

Jika anda perlu memastikan bahawa tugas pembersihan dilakukan sebelum program ditamatkan, anda harus mempertimbangkan untuk menggunakan fungsi pengelogan lain, seperti log.Cetak atau log.Println, yang tidak menamatkan program.

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:
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