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!