Junior — Middle
Pouvez-vous expliquer comment fonctionne le mécanisme d'attente de la fin de plusieurs goroutines en Go avec WaitGroup?
sobes.tech IA
Réponse de l'IA
En Go, pour attendre la fin de plusieurs goroutines, on utilise le type sync.WaitGroup. Il permet de "souscrire" à plusieurs goroutines et de bloquer l'exécution jusqu'à ce qu'elles se terminent toutes.
Principaux méthodes de WaitGroup :
- Add(n int) — augmente le compteur de n, généralement appelé avant de lancer les goroutines.
- Done() — diminue le compteur de 1, appelé à la fin de chaque goroutine.
- Wait() — bloque l'exécution jusqu'à ce que le compteur atteigne 0.
Exemple d'utilisation :
var wg sync.WaitGroup
wg.Add(3) // attendons 3 goroutines
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // signaler la fin
fmt.Printf("Goroutine %d en cours\n", id)
// un travail quelconque
}(i)
}
wg.Wait() // attend la fin de toutes les goroutines
fmt.Println("Toutes les goroutines sont terminées")