Sobes.tech
Senior

Dlaczego potrzebujemy WaitGroup w tym zadaniu?

sobes.tech AI

Odpowiedź od AI

WaitGroup w Go jest używany do synchronizacji gorutyn. W zadaniach, w których uruchamianych jest wiele gorutyn, WaitGroup pozwala głównemu wątkowi oczekiwać na zakończenie wszystkich uruchomionych gorutyn przed kontynuowaniem wykonania. Zapobiega to przedwczesnemu wyjściu z programu lub przejściu do następnego etapu, gdy operacje w tle jeszcze się nie zakończyły.

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
        // praca gorutyny
        fmt.Println("Gorutyna", id, "zakończona")
    }(i)
}

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

W ten sposób WaitGroup zapewnia poprawną koordynację i zapobiega wyścigom lub przedwczesnemu zakończeniu programu.