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 avecdefer).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")
}