Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Goroutinen ordnungsgemäß beenden und Fehler in Go behandeln?

Wie kann ich Goroutinen ordnungsgemäß beenden und Fehler in Go behandeln?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-14 13:44:02855Durchsuche

How Can I Gracefully Terminate Goroutines and Handle Errors in Go?

Idiomatische Goroutine-Beendigung und Fehlerbehandlung

Im Bereich der Go-Parallelität ist die nahtlose Handhabung der Beendigung von Goroutinen und Fehlern von entscheidender Bedeutung. Stellen Sie sich einen einfachen Anwendungsfall vor, bei dem wir darauf abzielen, Daten von mehreren Remote-Servern gleichzeitig abzurufen und dabei den ersten aufgetretenen Fehler zurückzugeben.

Undichte Goroutinen

Bei einem ersten Versuch kann es zu undichten Goroutinen kommen, wie im Folgenden hervorgehoben wird Codeausschnitt:

func fetchAll() error {
  wg := sync.WaitGroup{}
  errs := make(chan error)
  leaks := make(map[int]struct{})
  //...
}

Um dieses Problem zu beheben, können wir entweder Kontext verwenden oder die Fehlergruppe verwenden Paket:

Fehlergruppenlösung

Das errgroup-Paket bietet eine praktische Möglichkeit, Goroutine-Abbrüche und -Fehler zu verwalten. Es wartet automatisch auf den Abschluss aller bereitgestellten Goroutinen oder bricht die verbleibenden ab, falls ein Fehler auftritt.

func fetchAll(ctx context.Context) error {
  errs, ctx := errgroup.WithContext(ctx)
  //...
  return errs.Wait()
}

Dieser Code handhabt die Beendigung der Goroutine elegant und gibt den ersten aufgetretenen Fehler zurück.

Das obige ist der detaillierte Inhalt vonWie kann ich Goroutinen ordnungsgemäß beenden und Fehler in Go behandeln?. 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