Rumah > Artikel > pembangunan bahagian belakang > Mengapa Saya Tidak Dapat Memulihkan Panik dalam Rutin Pergi?
Mengendalikan Panik dalam Rutin Pergi
Walaupun cuba untuk mengendalikan panik dalam rutin go, blok kod mungkin menghadapi masalah yang tidak panik. pulih. Artikel ini meneroka sebab di sebalik perkara ini dan menyediakan penyelesaian untuk mengendalikan panik secara berkesan dalam konteks serentak.
Memahami Pemulihan Panik dalam Go
Dalam Go, fungsi recover() ialah digunakan untuk memintas dan mengendalikan keadaan panik. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pemulihan hanya boleh berlaku dalam goroutine yang sama di mana panik dicetuskan.
Isu dengan Pemulihan Gagal
Dalam kod yang disediakan blok, panik berasal daripada operasi penyahrujukan nol-pointer dalam handle() goroutine. Percubaan pemulihan di luar goroutine ini, dalam fungsi tangguh main(), tidak berjaya kerana recover() tidak boleh mencapai titik panik.
Penyelesaian: Menyebarkan Panik
Untuk menangani panik dalam goroutine, anda boleh menyebarkannya kembali ke rutin utama di mana rutin pergi itu dicetuskan. Ini boleh dicapai dengan menambah penyataan recover() dalam handle() goroutine, seperti yang ditunjukkan di bawah:
func handle(done chan int64) { var a *int64 a = nil defer func() { if r := recover(); r != nil { done <- 1 } }() fmt.Println(*a) done <- *a }
Dengan segera mengembalikan 1 ke saluran yang dilakukan dalam fungsi recover() tertunda, rutin utama boleh mengesan panik dan mengambil tindakan yang sewajarnya, seperti penamatan program yang anggun atau pengelogan ralat.
Kesimpulan
Apabila mengendalikan panik dalam rutin Go, adalah penting untuk memahami skop pemulihan panik dan melaksanakan mekanisme penyebaran yang betul. Dengan mematuhi garis panduan yang dibincangkan dalam artikel ini, anda boleh mengurus keadaan panik dengan berkesan dalam persekitaran serentak dan memastikan kebolehpercayaan program Go anda.
Atas ialah kandungan terperinci Mengapa Saya Tidak Dapat Memulihkan Panik dalam Rutin Pergi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!