Sobes.tech
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.