Sobes.tech
Middle+

Parlez-moi plus en détail de WaitGroup : comment ça fonctionne, que font Add, Done, Wait ?

sobes.tech IA

Réponse de l'IA

WaitGroup en Go est utilisé pour attendre la fin d'un groupe de goroutines.

  • Add(n int) — augmente le compteur de n, généralement appelé avant de lancer des goroutines.
  • Done() — diminue le compteur de 1, appelé dans la goroutine après la fin de son travail.
  • Wait() — bloque l'exécution jusqu'à ce que le compteur atteigne zéro, c'est-à-dire que toutes les goroutines aient appelé Done.

Exemple:

var wg sync.WaitGroup
wg.Add(3) // attend 3 goroutines

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done()
        fmt.Println("Goroutine", id, "terminée")
    }(i)
}

wg.Wait() // attend que toutes les goroutines se terminent
fmt.Println("Toutes les goroutines sont terminées")

Ainsi, WaitGroup aide à synchroniser des tâches parallèles et à attendre leur fin.