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
Lepaskan: 2024-12-04 16:24:16
asal
215 orang telah melayarinya

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).
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:php.cn
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