Maison >développement back-end >Golang >Comment gérer les exceptions dans Goroutine ?
Gestion des exceptions dans Goroutine : utilisez recovery pour obtenir l'exception du point de récupération. Gérez les exceptions dans les instructions defer, telles qu'un message d'erreur imprimable. Cas pratique : vérifiez de manière asynchrone les autorisations d'accès des utilisateurs, capturez les exceptions avec des autorisations insuffisantes et affichez des messages conviviaux aux utilisateurs.
Comment gérer les exceptions dans Goroutine ?
En programmation simultanée, les coroutines ou Goroutines sont des threads légers qui s'exécutent indépendamment. Cependant, la gestion des exceptions dans Goroutines n'est pas tout à fait la même que dans les threads traditionnels.
Gestion des exceptions dans Goroutine
Tout d'abord, créons un Goroutine :
func main() { go func() { // 可能会抛出异常的代码 }() }
Go n'attrape pas les exceptions dans Goroutine par défaut. Si Goroutine lève une exception, le programme plantera. Afin de gérer les exceptions, nous devons utiliser la fonction 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
defer
, nous utilisons recover
pour obtenir l'exception à partir du point de récupération et en fonction de la nécessité de le gérer. 🎜🎜🎜Cas pratique : accès à des ressources protégées🎜🎜🎜Supposons que nous ayons une ressource protégée à laquelle seuls les utilisateurs disposant d'autorisations d'accès spécifiques peuvent y accéder. Nous pouvons utiliser Goroutine pour vérifier les autorisations de l'utilisateur de manière asynchrone : 🎜rrreee🎜 Dans cet exemple, Goroutine peut lancer une exception errors.New("No access permission")
, ce qui provoquera le crash du programme. En utilisant l'instruction defer
et la fonction recover
, nous sommes capables de détecter les exceptions et d'afficher un message d'erreur convivial à l'utilisateur. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!