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

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

Barbara Streisand
Lepaskan: 2024-11-28 13:06:11
asal
609 orang telah melayarinya

Do Deferred Functions Execute After a `log.Fatalln()` Call in Go?

Panggilan dan log Fungsi Tertunda.Fatalln()

Dalam Go, fungsi tertunda dilaksanakan apabila fungsi kembali, walaupun fungsi panik. Walau bagaimanapun, apakah yang berlaku kepada fungsi tertunda apabila atur cara ditamatkan disebabkan oleh panggilan ke log.Fatalln()?

Gelagat Fungsi Tertunda dalam log.Fatalln()

Fungsi log.Fatalln() digunakan untuk log ralat dan kemudian menamatkan program. Ia bersamaan dengan log panggilan.Print() diikuti oleh panggilan ke os.Exit(1).

os.Exit() dan Deferred Functions

os.Exit() menyebabkan atur cara untuk keluar dengan segera. Ini penting kerana:

log.Fatal calls os.Exit
os.Exit does not run deferred functions
Salin selepas log masuk

Oleh itu, sebarang fungsi tertunda yang ditakrifkan selepas panggilan untuk log.Fatalln() tidak dipanggil.

Contoh

Berikut ialah contoh untuk menunjukkan tingkah laku ini:

import (
    "log"
    "os"
)

func main() {
    f, _ := os.Create("foo.txt")
    defer f.Close()

    log.Fatalln("Error")
}
Salin selepas log masuk

Dalam contoh ini, program cuba membuka dan menutup fail menggunakan fungsi tertunda. Walau bagaimanapun, fail itu tidak pernah ditutup kerana atur cara ditamatkan oleh panggilan untuk log.Fatalln().

Kesimpulan

Jika anda perlu menutup sumber dengan betul atau melakukan tindakan pembersihan sebelum program keluar , elakkan menggunakan log.Fatalln(). Sebaliknya, tangani ralat dengan anggun dan pastikan fungsi tertunda dilaksanakan dengan betul.

Atas ialah kandungan terperinci Adakah Fungsi Tertunda Melaksanakan Selepas `log.Fatalln()` Panggilan Masuk 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