Rumah >pembangunan bahagian belakang >Golang >Mengapakah `recover()` Mengembalikan `nil` dalam Nested Deferred Functions dalam Go?
Gelagat Recover() dalam Fungsi Tertunda Bersarang
Dalam Go, panic() dan recover() digunakan untuk mengendalikan ralat masa jalan . Walau bagaimanapun, ralat boleh pulih mesti dikendalikan oleh fungsi tertunda.
Kes Mudah:
Dalam senario fungsi tertunda yang mudah, fungsi recover() seperti yang dijangkakan:
package main import "fmt" func printRecover() { r := recover() fmt.Println("Recovered:", r) } func main() { defer printRecover() panic("OMG!") }
Tertunda Bersarang Kes:
Apabila printRecover() dibalut dengan fungsi tertunda bersarang:
func main() { defer func() { printRecover() }() panic("OMG!") }
tingkah laku berubah. recover() dalam printRecover() mengembalikan sifar. Ini kerana:
Mengikut spesifikasi Go:
Nilai pulangan recover() adalah sifar jika recover() tidak dipanggil terus oleh fungsi tertunda.
Dalam kes bersarang, printRecover() dipanggil oleh fungsi tertunda bersarang, bukan secara langsung oleh permulaan satu.
Kesimpulan:
Untuk recover() berfungsi dalam fungsi tertunda bersarang, ia mesti dipanggil terus oleh fungsi tertunda yang mengendalikan panik. Apabila syarat ini tidak dipenuhi, recover() akan mengembalikan sifar.
Atas ialah kandungan terperinci Mengapakah `recover()` Mengembalikan `nil` dalam Nested Deferred Functions dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!