Heim >Backend-Entwicklung >Golang >Wie gehe ich mit Ausnahmen in Goroutine um?
Behandeln von Ausnahmen in Goroutine: Verwenden Sie „recover“, um die Ausnahme vom Wiederherstellungspunkt abzurufen. Behandeln Sie Ausnahmen innerhalb von Defer-Anweisungen, z. B. einer druckfreundlichen errorMessage. Praktischer Fall: Überprüfen Sie asynchron die Benutzerzugriffsberechtigungen, erfassen Sie Ausnahmen mit unzureichenden Berechtigungen und zeigen Sie den Benutzern benutzerfreundliche Nachrichten an.
Wie gehe ich mit Ausnahmen in Goroutine um?
Bei der gleichzeitigen Programmierung sind Coroutinen oder Goroutinen leichtgewichtige Threads, die unabhängig voneinander ausgeführt werden. Allerdings ist die Behandlung von Ausnahmen in Goroutinen nicht ganz die gleiche wie bei herkömmlichen Threads.
Behandeln von Ausnahmen in Goroutine
Erstellen wir zunächst eine Goroutine:
func main() { go func() { // 可能会抛出异常的代码 }() }
Go fängt standardmäßig keine Ausnahmen in Goroutine ab. Wenn die Goroutine eine Ausnahme auslöst, stürzt das Programm ab. Um Ausnahmen zu behandeln, müssen wir die Funktion recover
verwenden: 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
-Anweisung verwenden wir recover
, um die Ausnahme abzurufen vom Wiederherstellungspunkt und basierend auf der Notwendigkeit, damit umzugehen. 🎜🎜🎜Praktischer Fall: Zugriff auf geschützte Ressourcen🎜🎜🎜Angenommen, wir haben eine geschützte Ressource, auf die nur Benutzer mit bestimmten Zugriffsberechtigungen zugreifen können. Wir können Goroutine verwenden, um die Berechtigungen des Benutzers asynchron zu überprüfen: 🎜rrreee🎜 In diesem Beispiel löst Goroutine möglicherweise eine Ausnahme errors.New("Keine Zugriffsberechtigung")
aus, die zum Absturz des Programms führt. Durch die Verwendung der defer
-Anweisung und der recover
-Funktion können wir Ausnahmen abfangen und dem Benutzer eine benutzerfreundliche Fehlermeldung anzeigen. 🎜Das obige ist der detaillierte Inhalt vonWie gehe ich mit Ausnahmen in Goroutine um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!