Junior
Qu'est-ce que WaitGroup en Go et à quoi sert-il?
sobes.tech IA
Réponse de l'IA
WaitGroup est un mécanisme de synchronisation en Go qui permet d'attendre la fin d'un groupe de goroutines.
Il est utilisé pour:
- Attendre que toutes les goroutines se terminent avant de sortir de la fonction ou du programme.
- Coordonner le travail entre plusieurs goroutines.
Exemple d'utilisation:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Diminue le compteur à la fin de la goroutine
fmt.Printf("Travailleur %d a commencé\n", id)
time.Sleep(time.Second) // Simulation de travail
fmt.Printf("Travailleur %d a terminé\n", id)
}
func main() {
var wg sync.WaitGroup // Déclare un WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Augmente le compteur avant de lancer chaque goroutine
go worker(i, &wg)
}
wg.Wait() // Bloque l'exécution de main jusqu'à ce que le compteur atteigne 0
fmt.Println("Tous les travailleurs ont terminé")
}
Méthodes principales:
Add(delta int): Augmente le compteur interne deWaitGroupdedelta. Doit être appelé avant de lancer chaque goroutine à suivre.Done(): Diminue le compteur interne deWaitGroupde 1. Généralement appelé dansdeferà l'intérieur de la goroutine pour garantir la réduction même en cas de panic.Wait(): Bloque la goroutine en cours jusqu'à ce que le compteur interne deWaitGroupatteigne 0.