Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memastikan Goroutine Saya Berjalan Walaupun Selepas Panik?
Menjaga Goroutines Berlari Walaupun Ranap
Dalam Go, goroutin berkuasa tetapi boleh terdedah kepada ranap akibat ralat atau panik. Untuk memastikan kegagalan satu goroutine tidak memberi kesan kepada orang lain, pembangun mungkin tertanya-tanya sama ada terdapat cara untuk memastikan goroutine yang tidak terjejas berjalan.
Untuk pulih daripada panik, fungsi recover() terbina dalam digunakan. Ia membolehkan anda menangkap panik dalam fungsi tertunda. Fungsi pembantu berikut, protect(), menggunakan mekanisme ini untuk melancarkan goroutine dengan pemulihan panik:
func protect(f func()) { defer func() { if err := recover(); err != nil { log.Printf("Recovered: %v", err) } }() f() }
Untuk menggunakan perlindungan ini, hanya berikan fungsi anda sebagai hujah untuk protect(). Dengan membungkus panggilan ini dalam gelung for yang terus mencetak "tanda", kami boleh menunjukkan cara goroutine yang dilindungi oleh protect() akan terus berjalan walaupun panik berlaku dalam goroutine lain:
func main() { go protect(doPanic) for { time.Sleep(time.Second) fmt.Println("tick") } }
Aplikasi ujian ini akan mengeluarkan:
2021/03/04 14:12:31 about to panic 2021/03/04 14:12:31 Recovered: test tick tick tick ...
Seperti yang anda lihat, panik dalam fungsi doPanic dipulihkan dan dikendalikan, manakala yang dilindungi goroutine terus berjalan dan mencetak "tanda." Pendekatan ini berkesan mengasingkan goroutine daripada panik, memastikan satu kegagalan tidak merebak dan merosakkan keseluruhan aplikasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Goroutine Saya Berjalan Walaupun Selepas Panik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!