Sobes.tech
Junior — Middle

Jakie funkcje zapewnia struktura WaitGroup w języku Go do synchronizacji goroutine?

sobes.tech AI

Odpowiedź od AI

W języku Go struktura sync.WaitGroup służy do synchronizacji wielu gorutyn, umożliwiając głównej gorutynie oczekiwanie na ich zakończenie.

Główne metody WaitGroup:

  • Add(delta int) — zwiększa lub zmniejsza licznik oczekiwanych gorutyn. Zazwyczaj wywoływana przed uruchomieniem gorutyn.

  • Done() — zmniejsza licznik o 1, wywoływana na końcu pracy gorutyny.

  • Wait() — blokuje wykonanie do momentu, gdy licznik nie osiągnie zera.

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.Println("Gorutyna", id)
    }(i)
}

wg.Wait() // czekamy na zakończenie wszystkich gorutyn
fmt.Println("Wszystkie gorutyny zakończone")

W ten sposób WaitGroup pomaga koordynować równoległe wykonanie i zapewnia, że program nie zakończy się wcześniej niż powinien.