Junior — Middle
Czy możesz wyjaśnić, jak działa mechanizm oczekiwania na zakończenie wielu gorutyn w Go za pomocą WaitGroup?
sobes.tech AI
Odpowiedź od AI
W Go, aby oczekiwać na zakończenie wielu gorutyn, używa się typu sync.WaitGroup. Pozwala on na "subskrypcję" wielu gorutyn i blokuje wykonanie do czasu, aż wszystkie się zakończą.
Główne metody WaitGroup:
- Add(n int) — zwiększa licznik o n, zwykle wywoływane przed uruchomieniem gorutyn.
- Done() — zmniejsza licznik o 1, wywoływane na końcu każdej gorutyny.
- Wait() — blokuje wykonanie do momentu, gdy licznik nie osiągnie 0.
Przykład użycia:
var wg sync.WaitGroup
wg.Add(3) // oczekujemy 3 gorutyn
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // sygnalizujemy zakończenie
fmt.Printf("Gorutyna %d działa\n", id)
// jakaś praca
}(i)
}
wg.Wait() // czekamy na zakończenie wszystkich gorutyn
fmt.Println("Wszystkie gorutyny zakończone")