Wie man mit Panik in Go-Routinen umgeht: Wie funktioniert der Wiederherstellungsumfang?

Barbara Streisand
Freigeben: 2024-11-07 03:13:02
Original
844 Leute haben es durchsucht

How to Handle Panics in Go Routines: Understanding Recover Scope?

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 Paniken in einer Go-Routine umzugehen, ist es wichtig, den Umfang von „recover()“ zu verstehen.

Recover()-Bereich verstehen

recover() kann sich nur von Paniken erholen 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 Panikwert zugreifen.

func main() {
    // ...

    go handle(done)
    // ...
}

func handle(done chan int64) {
    // ...
    fmt.Println(*a) // Panic here
    done <- *a      // Dereferencing nil pointer
}
Nach dem Login kopieren

Beispiel mit korrekter Fehlerbehandlung

Um in einer Goroutine ausgelöste Paniken zu behandeln, platzieren Sie die Wiederherstellung () innerhalb 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
    done <- *a      // Dereferencing nil pointer
}
Nach dem Login kopieren

Erklärung

In diesem korrigierten Beispiel befindet sich „recover()“ jetzt innerhalb der handle()-Goroutine, sodass es erfasst werden kann die Panik, 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.

Das obige ist der detaillierte Inhalt vonWie man mit Panik in Go-Routinen umgeht: Wie funktioniert der Wiederherstellungsumfang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!