Sobes.tech
Junior

Wofür wird WaitGroup in Go verwendet?

sobes.tech KI

Antwort von AI

WaitGroup wird verwendet, um die Arbeit einer oder mehrerer Goroutines zu synchronisieren. Es ermöglicht der Hauptgoroutine, auf den Abschluss anderer erstellter Goroutines zu warten. Es besteht aus einem Zähler, der beim Erstellen einer Goroutine erhöht und beim Beenden verringert wird.

Hauptmethoden:

  • Add(delta int): Erhöht oder verringert den Zähler der Goroutines.
  • Done(): Verringert den Zähler um 1. Wird in der Regel am Ende einer Goroutine aufgerufen (oft mit defer).
  • Wait(): Blockiert die Ausführung, bis der Zähler null ist.

Anwendungsbeispiel:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Verringert den Zähler bei Abschluss der Goroutine

	fmt.Printf("Goroutine %d beginnt\n", id)
	// Arbeit simulieren
	// time.Sleep(time.Second)
	fmt.Printf("Goroutine %d beendet\n", id)
}

func main() {
	var wg sync.WaitGroup // Erstellen eines WaitGroup

	for i := 1; i <= 5; i++ {
		wg.Add(1) // Zähler für jede Goroutine erhöhen
		go worker(i, &wg) // Goroutine starten, Zeiger auf WaitGroup übergeben
	}

	wg.Wait() // Warten, bis der Zähler 0 ist (alle Goroutines beendet)
	fmt.Println("Alle Goroutines beendet")
}