Umgang mit Panikattacken in Go-Routinen
Go bietet die integrierten Panic()- und Recover()-Funktionen, um unerwartete Fehler und schwerwiegende Zustände zu verwalten Ausführen von Code. Um mit Paniks in einer Go-Routine umzugehen, ist es wichtig, den Umfang von „recover()“ zu verstehen.
Recover()-Bereich verstehen
recover() kann nur von Paniks wiederhergestellt werden innerhalb derselben Goroutine, die die Panik ausgelöst hat. Wenn in einer Goroutine ohne aktives „recover()“ eine Panik auftritt, stürzt das gesamte Programm ab.
Beispiel mit falscher Fehlerbehandlung
Das bereitgestellte Codebeispiel in der Frage kann eine Panik nicht behandeln, da „recover()“ in der Hauptroutine definiert ist, während die Panik in der Goroutine „handle()“ ausgelöst wird. Daher kann „recover()“ nicht auf den Panic-Wert zugreifen.
func main() { // ... go handle(done) // ... } func handle(done chan int64) { // ... fmt.Println(*a) // Panic here doneBeispiel mit korrekter Fehlerbehandlung
Um in einer Goroutine ausgelöste Paniken zu behandeln, platzieren Sie „recover()“ in der Goroutine selbst.
func main() { // ... defer func() { if r := recover(); r != nil { fmt.Println("Recovered") } }() go handle(done) // ... } func handle(done chan int64) { // ... defer func() { if r := recover(); r != nil { fmt.Println("Recovered") } }() fmt.Println(*a) // Panic here doneErläuterung
In diesem korrigierten Beispiel befindet sich „recover()“ jetzt innerhalb der handle()-Goroutine, sodass es die Panik erfassen kann, die durch die Dereferenzierung des Nullzeigers ausgelöst wird. Die Panik wird dann wiederhergestellt und die Meldung „Wiederhergestellt“ wird gedruckt.
Das Verständnis des Umfangs von „recover()“ ist für eine effektive Fehlerbehandlung in Go-Routinen von entscheidender Bedeutung. Platzieren Sie „recover()“ immer in derselben Goroutine, in der die Panik auftreten könnte, um unerwartete Bedingungen ordnungsgemäß zu bewältigen und zu melden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3