Sobes.tech
Junior

Wat is een WaitGroup in Go en waar wordt het voor gebruikt?

sobes.tech AI

Antwoord van AI

WaitGroup is een synchronisatie-mechanisme in Go waarmee je kunt wachten tot een groep goroutines is voltooid.

Het wordt gebruikt voor:

  • Wachten tot alle goroutines klaar zijn voordat je de functie of het programma verlaat.
  • Coördinatie van werk tussen meerdere goroutines.

Voorbeeld van gebruik:

package main

import (
	"fmt"
	"sync"
	"time"
)

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

	fmt.Printf("Werker %d is begonnen\n", id)
	time.Sleep(time.Second) // Simulatie van werk
	fmt.Printf("Werker %d is klaar\n", id)
}

func main() {
	var wg sync.WaitGroup // Declareer een WaitGroup
	numWorkers := 3

	for i := 1; i <= numWorkers; i++ {
		wg.Add(1) // Verhoog de teller voordat je elke goroutine start
		go worker(i, &wg)
	}

	wg.Wait() // Blokkeert de uitvoering van main totdat de teller 0 is
	fmt.Println("Alle werkers zijn klaar")
}

Belangrijkste methoden:

  • Add(delta int): Verhoogt de interne teller van de WaitGroup met delta. Moet worden aangeroepen voordat elke te volgen goroutine wordt gestart.
  • Done(): Verlaagt de interne teller van de WaitGroup met 1. Wordt meestal aangeroepen met defer binnen de goroutine om de vermindering te garanderen, zelfs bij een panic.
  • Wait(): Blokkeert de huidige goroutine totdat de interne teller van de WaitGroup 0 wordt.