Middle+
Opowiedz więcej o WaitGroup: jak działa, co robią Add, Done, Wait?
sobes.tech AI
Odpowiedź od AI
WaitGroup w Go jest używany do oczekiwania na zakończenie grupy goroutine.
- Add(n int) — zwiększa licznik o n, zwykle wywoływany przed uruchomieniem goroutine.
- Done() — zmniejsza licznik o 1, wywoływany w goroutine po zakończeniu pracy.
- Wait() — blokuje wykonanie do momentu, aż licznik nie osiągnie zera, czyli aż wszystkie goroutine wywołają Done.
Przykład:
var wg sync.WaitGroup
wg.Add(3) // oczekujemy 3 goroutine
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
fmt.Println("Goroutine", id, "zakończona")
}(i)
}
wg.Wait() // czekamy na zakończenie wszystkich goroutine
fmt.Println("Wszystkie goroutine zakończone")
W ten sposób WaitGroup pomaga synchronizować zadania równoległe i oczekiwać ich zakończenia.