Heim >Backend-Entwicklung >Golang >Wie kann ich meine Go-Goroutinen auch nach einer Panik am Laufen halten?
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!