Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Fungsi `recover()` Go Mengekalkan Berbilang Goroutine Berjalan Selepas Panik?
Memastikan Berbilang Goroutine Berjalan Sekiranya Berlaku Kemalangan
Apabila bekerja dengan berbilang goroutine dalam Go, adalah penting untuk mempertimbangkan senario di mana satu goroutine mungkin ranap atau panik, berpotensi menjejaskan keseluruhan program. Untuk mengelakkan ini, program mesti mengendalikan situasi ini dengan anggun, membenarkan goroutine lain terus berjalan.
Menggunakan Fungsi Pulih
Go menyediakan pemulihan terbina dalam( ) fungsi yang membolehkan pengendalian panik dan pulih daripadanya. Untuk menggunakan fungsi ini, ia mesti dipanggil dalam fungsi tertunda. Dengan cara ini, jika panik berlaku, ia ditangkap dan program menyambung semula pelaksanaannya selepas fungsi tertunda selesai.
Berikut ialah contoh cara recover() boleh digunakan:
func doPanic() { fmt.Println("About to panic") panic("test") } func protect(f func()) { defer func() { if err := recover(); err != nil { fmt.Printf("Recovered: %v", err) } }() f() } func main() { go protect(doPanic) for { time.Sleep(time.Second) fmt.Println("Tick") } }
Penjelasan
Output
Apabila kod ini dilaksanakan, ia akan mengeluarkan:
About to panic Recovered: test Tick Tick Tick ...
Ini menggambarkan bahawa walaupun doPanic menyebabkan panik, program terus berjalan kerana panggilan recover(), membenarkan goroutine yang lain untuk terus melaksanakan selama-lamanya.
Adalah penting untuk ambil perhatian bahawa walaupun recover() membenarkan program untuk terus berjalan, ia tidak menghalang panik yang mendasari daripada berlaku. Oleh itu, adalah penting untuk mengenal pasti dan menangani punca panik untuk mengelakkannya daripada berulang pada masa hadapan.
Atas ialah kandungan terperinci Bagaimanakah Fungsi `recover()` Go Mengekalkan Berbilang Goroutine Berjalan Selepas Panik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!