Sobes.tech
Junior

À quoi sert WaitGroup en Go?

sobes.tech IA

Réponse de l'IA

WaitGroup est utilisé pour synchroniser le travail d'une ou plusieurs goroutines. Il permet à la goroutine principale d'attendre la fin d'autres goroutines créées. Il se compose d'un compteur qui augmente lors de la création d'une goroutine et diminue lorsqu'elle se termine.

Méthodes principales :

  • Add(delta int): Augmente ou diminue le compteur de goroutines.
  • Done(): Diminue le compteur de 1. Généralement appelé à la fin d'une goroutine (souvent avec defer).
  • Wait(): Bloque l'exécution jusqu'à ce que le compteur atteigne zéro.

Exemple d'utilisation :

package main

import (
	"fmt"
	"sync"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Diminue le compteur à la fin de la goroutine

	fmt.Printf("Goroutine %d commence\n", id)
	// Simulation de travail
	// time.Sleep(time.Second)
	fmt.Printf("Goroutine %d termine\n", id)
}

func main() {
	var wg sync.WaitGroup // Créer un WaitGroup

	for i := 1; i <= 5; i++ {
		wg.Add(1) // Augmenter le compteur pour chaque goroutine
		go worker(i, &wg) // Lancer la goroutine, en passant le pointeur vers le WaitGroup
	}

	wg.Wait() // Attendre que le compteur atteigne 0 (toutes les goroutines terminent)
	fmt.Println("Toutes les goroutines sont terminées")
}