Mengendalikan pengecualian dalam Goroutine: Gunakan pulih untuk mendapatkan pengecualian dari titik pemulihan. Mengendalikan pengecualian dalam penyata tangguh, seperti mesej ralat mesra cetak. Kes praktikal: Semak kebenaran akses pengguna secara tak segerak dan tangkap pengecualian dengan kebenaran yang tidak mencukupi, dan paparkan mesej mesra kepada pengguna.
Bagaimana untuk mengendalikan pengecualian dalam Goroutine?
Dalam pengaturcaraan serentak, coroutine atau Goroutine ialah utas ringan yang dilaksanakan secara bebas. Walau bagaimanapun, pengendalian pengecualian dalam Goroutines tidaklah sama seperti benang tradisional.
Mengendalikan Pengecualian dalam Goroutine
Mula-mula, mari buat Goroutine:
func main() { go func() { // 可能会抛出异常的代码 }() }
Go tidak menangkap pengecualian dalam Goroutine secara lalai. Jika Goroutine melemparkan pengecualian, program akan ranap. Untuk mengendalikan pengecualian, kita perlu menggunakan fungsi recover
: recover
函数:
func main() { go func() { defer func() { if r := recover(); r != nil { // 处理异常 fmt.Println("捕获到异常:", r) } }() }() }
在 defer
语句的内部,我们使用 recover
从恢复点获取异常并根据需要处理它。
实战案例:访问受保护资源
假设我们有一个受保护的资源,只有具有特定访问权限的用户才能访问它。我们可以使用 Goroutine 来异步检查用户的权限:
func checkAccess(userId int) error { user, err := getUserByID(userId) if err != nil { return err } if user.accessLevel != ADMIN { return errors.New("没有访问权限") } return nil } func main() { userIDs := []int{1, 2, 3} for _, id := range userIDs { go func(userId int) { if err := checkAccess(userId); err != nil { defer func() { if r := recover(); r != nil { // 处理异常:权限不足 fmt.Println("用户", userId, ": 权限不足") } }() panic(err) } fmt.Println("用户", userId, ": 有访问权限") }(id) } }
在这个示例中,Goroutine 可能会抛出 errors.New("没有访问权限")
异常,这将导致程序崩溃。通过使用 defer
语句和 recover
rrreee
tunda
, kami menggunakan recover
untuk mendapatkan pengecualian dari titik pemulihan dan berdasarkan Keperluan untuk menanganinya. 🎜🎜🎜Kes Praktikal: Mengakses Sumber Dilindungi🎜🎜🎜Andaikan kita mempunyai sumber yang dilindungi yang hanya pengguna yang mempunyai kebenaran akses tertentu boleh mengaksesnya. Kami boleh menggunakan Goroutine untuk menyemak kebenaran pengguna secara tak segerak: 🎜rrreee🎜 Dalam contoh ini, Goroutine mungkin membuang errors.New("No access permission")
pengecualian, yang akan menyebabkan program ranap. Dengan menggunakan pernyataan tunda
dan fungsi recover
, kami dapat menangkap pengecualian dan memaparkan mesej ralat mesra kepada pengguna. 🎜Atas ialah kandungan terperinci Bagaimana untuk mengendalikan pengecualian dalam Goroutine?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!