Sobes.tech
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")