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