Rumah >pembangunan bahagian belakang >Golang >Cara Mengendalikan Panik dalam Rutin Pergi: Memahami Skop Pemulihan?
Mengendalikan Panik dalam Rutin Pergi
Go menyediakan panic() dan recover() terbina dalam untuk menguruskan ralat yang tidak dijangka dan keadaan maut dalam kod berjalan. Untuk mengendalikan panik dalam rutin pergi, adalah penting untuk memahami skop recover().
Memahami Skop recover()
recover() hanya boleh pulih daripada panik dalam goroutine yang sama yang menimbulkan panik. Jika panik berlaku dalam goroutine tanpa recover() aktif, keseluruhan program akan ranap.
Contoh dengan Pengendalian Ralat yang Tidak Betul
Contoh kod yang disediakan dalam soalan gagal menangani panik kerana recover() ditakrifkan dalam rutin utama, manakala panik dinaikkan dalam handle() goroutine. Akibatnya, recover() tidak boleh mengakses nilai panik.
func main() { // ... go handle(done) // ... } func handle(done chan int64) { // ... fmt.Println(*a) // Panic here done <- *a // Dereferencing nil pointer }
Contoh dengan Pengendalian Ralat Betul
Untuk menangani panik yang ditimbulkan dalam goroutine, letakkan recover () dalam goroutine itu sendiri.
func main() { // ... defer func() { if r := recover(); r != nil { fmt.Println("Recovered") } }() go handle(done) // ... } func handle(done chan int64) { // ... defer func() { if r := recover(); r != nil { fmt.Println("Recovered") } }() fmt.Println(*a) // Panic here done <- *a // Dereferencing nil pointer }
Penjelasan
Dalam contoh yang diperbetulkan ini, recover() kini berada dalam handle() goroutine, jadi ia boleh menangkap panik yang ditimbulkan dengan tidak merujuk penuding nol. Panik kemudiannya dipulihkan dan mesej "Dipulihkan" dicetak.
Memahami skop recover() adalah penting untuk pengendalian ralat yang berkesan dalam rutin Go. Sentiasa letakkan recover() dalam goroutine yang sama di mana panik boleh berlaku untuk mengendalikan dan melaporkan sebarang keadaan yang tidak dijangka dengan anggun.
Atas ialah kandungan terperinci Cara Mengendalikan Panik dalam Rutin Pergi: Memahami Skop Pemulihan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!