Golang Errgroup

Golang Errgroup

Das Golang Errgroup -Paket wird verwendet, um Tools für die Synchronisation, Fehlerausbreitung und Kontext -Stornierung für eine Gruppe von Goroutinen bereitzustellen, die eine gemeinsame Aufgabe ausführen.

Schauen wir uns einen Blick auf die Verwendung des Errgroup -Pakets an.

Erforderliches Paket importieren

Um das Errgroup -Paket zu verwenden, müssen Sie es mit der Importklausel importieren. Der folgende Beispielcode zeigt, wie das Errgroup -Paket importiert wird.

Import "Golang.org/x/sync/ergroup "

With Context -Funktion

Das Errgroup -Paket bietet uns die With -Context -Funktion. Die Funktion gibt eine neue Gruppe und den zugehörigen Kontext zurück.

Wenn die übergebene Funktion einen Nicht-0-Nil-Fehler oder die Wartezeit zurückgibt, wird der Kontext abgebrochen.

Gehen Sie Func

Die zweite Funktion, die durch das Errgroup -Paket bereitgestellt wird, ist die GO -Funktion. Diese Funktion ruft eine bestimmte Funktion auf eine neue Goroutine auf.

Wenn der erste Anruf einen Nilfehler zurückgibt, wird der Kontext abgebrochen.

Warten Sie Func

Die dritte Funktion ist die Wartefunktion. Diese Funktion wartet auf einen Block, bis die Funktion auf die GO -Methode aufgerufen wird. Gibt einen Wert zurück.

Beispiel

Lassen Sie uns sehen, wie wir das Errgroup -Paket verwenden können. Beginnen wir mit einer Reihe von Go -Routinen, die einfach einen Wert drucken.

Paket Main
importieren "fmt"
func main ()
für i: = 0; ich < 10; i++
Geh fmt.Println ("Verarbeitungsaufgabe:", ich)

Hier haben wir eine für Schleife, die einfach eine Reihe von Goroutinen ausführt und den aktuellen Wert in der Schleifenerteration druckt.

Wenn wir den obigen Code ausführen, stellen Sie fest, dass er nichts druckt. Dies liegt daran.

Wir können dies durch das Synchronisationspaket aus der Standardbibliothek lösen. Überprüfen Sie unser Tutorial über Golang Sync, um mehr zu erfahren.

https: // linuxHint.com/golang-sync/

Wir können den obigen Code mit WaitGroups wie unten gezeigt neu definieren:

Paket Main
importieren (
"fmt"
"Synchronisation"
)
func main ()
WG: = & synchronisieren.WaitGroup
für i: = 0; ich < 10; i++
wg.(1) hinzufügen
Go func (Aufgabe int)
aufschieben wg.Erledigt()
fmt.Println ("Verarbeitungsaufgabe:", Aufgabe)
(ich)

wg.Warten()

Hier stellen wir "Parallelität" mit Kartellgruppen vor. Kurz gesagt, die Karteigruppe ist ein Zähler, mit dem wir die Hauptfunktion vom Verlassen beenden können, bis alle Goroutinen ausgeführt wurden.

Die Karteigruppe erstellt einen Zähler. Sobald eine Goroutine abgeschlossen ist, entfernen wir sie aus der Que. Sobald die Que 0 ist, entsperrt die Karteigruppe die Ausführung und kehrt zum Main zurück.

Beachten Sie die Funktion hinzufügen? Wir verwenden dies, um dem Wartegruppen -Que -Zähler einen Wert zu verleihen. Sobald die Ausführung abgeschlossen ist.

Verwenden von Errgroup

Im obigen Beispiel verarbeiten wir eine Gruppe von Goroutinen mithilfe des Sync -Pakets in Go. Es gibt jedoch keinen Mechanismus, um Fehler zu bewältigen. Obwohl es für ein einfaches Beispiel nicht erforderlich ist, wie oben gezeigt, ist es für viele Anwendungen wichtig.

Dafür können wir die Funktion Errgroup verwenden, mit der Fehler in einer Wartegruppe verarbeitet werden können. Schauen Sie sich das Beispiel unten an:

Paket Main
importieren (
"fmt"
"Protokoll"
"Math/Rand"
"Golang.org/x/sync/ergroup "
)
Func Task (Aufgabe int) Fehler
Wenn Rand.Intn (10) == Task
Rückgabe fmt.ERRORF ("Task %V fehlgeschlagen", Aufgabe)

fmt.Printf ("Task %v abgeschlossen", Aufgabe)
Null zurückkehren

func main ()
EG: = & Errgroup.Gruppe
für i: = 0; ich < 10; i++
Aufgabe: = i
z.B.Go (func () fehler
Return Task (Aufgabe)
)

Wenn er: = EG.Warten(); irren != nil
Protokoll.Fatal ("Fehler", ähm)

fmt.Println ("erfolgreich fertiggestellt!"))

In diesem Beispiel stellen wir eine einfache Funktion vor, die eine zufällige Ganzzahl erzeugt. Wenn der Zufallswert gleich der Aufgabe ist, geben wir einen Fehler zurück.

Anschließend verwenden wir die Fehlergruppe, um die Fehler mithilfe der Gruppe zu behandeln und Funktionen zu gehen.

Schließen

In diesem Leitfaden wurden Wartgruppen eingeführt und mithilfe des Errgroup -Pakets mit Fehlern umgehen.