Heim >Backend-Entwicklung >Golang >Wie kann ich meine Go-Goroutinen auch nach einer Panik am Laufen halten?

Wie kann ich meine Go-Goroutinen auch nach einer Panik am Laufen halten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-01 00:20:13244Durchsuche

How Can I Keep My Go Goroutines Running Even After a Panic?

Goroutinen trotz Abstürzen am Laufen halten

In Go sind Goroutinen leistungsstark, können jedoch anfällig für Abstürze aufgrund von Fehlern oder Paniken sein. Um sicherzustellen, dass sich der Ausfall einer Goroutine nicht auf andere Goroutinen auswirkt, fragen sich Entwickler möglicherweise, ob es eine Möglichkeit gibt, nicht betroffene Goroutinen am Laufen zu halten.

Zur Wiederherstellung nach Paniken wird die integrierte Funktion „recover()“ verwendet. Damit können Sie eine Panik innerhalb einer verzögerten Funktion abfangen. Die folgende Hilfsfunktion, protected(), verwendet diesen Mechanismus, um Goroutinen mit Panikwiederherstellung zu starten:

func protect(f func()) {
    defer func() {
        if err := recover(); err != nil {
            log.Printf("Recovered: %v", err)
        }
    }()

    f()
}

Um diesen Schutz zu verwenden, übergeben Sie einfach Ihre Funktion als Argument an protected(). Indem wir diesen Aufruf in eine for-Schleife einbinden, die kontinuierlich „tick“ ausgibt, können wir demonstrieren, wie die durch protected() geschützte Goroutine auch dann weiterläuft, wenn in einer anderen Goroutine eine Panik auftritt:

func main() {
    go protect(doPanic)

    for {
        time.Sleep(time.Second)
        fmt.Println("tick")
    }
}

Diese Testanwendung gibt aus:

2021/03/04 14:12:31 about to panic
2021/03/04 14:12:31 Recovered: test
tick
tick
tick
...

Wie Sie sehen können, wird die Panik in der doPanic-Funktion wiederhergestellt und behandelt, während die geschützte Goroutine weiter läuft und „Häkchen“ ausgibt. Dieser Ansatz isoliert Goroutinen effektiv vor Paniken und stellt sicher, dass sich ein einzelner Fehler nicht ausbreitet und die gesamte Anwendung zum Absturz bringt.

Das obige ist der detaillierte Inhalt vonWie kann ich meine Go-Goroutinen auch nach einer Panik am Laufen halten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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