Sobes.tech
Junior

Waarvoor wordt WaitGroup in Go gebruikt?

sobes.tech AI

Antwoord van AI

WaitGroup wordt gebruikt om het werk van één of meerdere goroutines te synchroniseren. Het stelt de hoofd-goroutine in staat te wachten tot andere gemaakte goroutines klaar zijn. Het bestaat uit een teller die wordt verhoogd bij het maken van een goroutine en verlaagd wanneer deze eindigt.

Belangrijkste methoden:

  • Add(delta int): Verhoogt of verlaagt de teller van goroutines.
  • Done(): Verlaagt de teller met 1. Wordt meestal aan het einde van een goroutine aangeroepen (vaak met defer).
  • Wait(): Blokkeert de uitvoering totdat de teller nul is.

Voorbeeld van gebruik:

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Verlaagt de teller bij het einde van de goroutine

	fmt.Printf("Goroutine %d begint\n", id)
	// Simulatie van werk
	// time.Sleep(time.Second)
	fmt.Printf("Goroutine %d eindigt\n", id)
}

func main() {
	var wg sync.WaitGroup // Maak een WaitGroup

	for i := 1; i <= 5; i++ {
		wg.Add(1) // Verhoog de teller voor elke goroutine
		go worker(i, &wg) // Start de goroutine, geef een pointer naar de WaitGroup door
	}

	wg.Wait() // Wacht tot de teller 0 is (alle goroutines eindigen)
	fmt.Println("Alle goroutines zijn klaar")
}