Junior — Middle
Puteți explica cum funcționează mecanismul de așteptare a finalizării mai multor goroutines în Go folosind WaitGroup?
sobes.tech AI
Răspuns de la AI
În Go, pentru a aștepta finalizarea mai multor goroutines, se folosește tipul sync.WaitGroup. Acesta permite "abonarea" la mai multe goroutines și blocarea execuției până când toate acestea se termină.
Metodele principale ale WaitGroup:
- Add(n int) — crește contorul cu n, de obicei apelat înainte de a porni goroutines.
- Done() — scade contorul cu 1, apelat la sfârșitul fiecărei goroutine.
- Wait() — blochează execuția până când contorul ajunge la 0.
Exemplu de utilizare:
var wg sync.WaitGroup
wg.Add(3) // așteptăm 3 goroutines
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // semnalăm finalizarea
fmt.Printf("Goroutine %d în execuție\n", id)
// o muncă
}(i)
}
wg.Wait() // așteptăm finalizarea tuturor goroutine-urilor
fmt.Println("Toate goroutine-urile au fost finalizate")