Sobes.tech
Senior

Czy zdecydowałeś się napisać WaitGroup, ponieważ pojawił się kanał, czy dlatego, że zdecydowałeś się napisać goroutines do czegoś?

sobes.tech AI

Odpowiedź od AI

WaitGroup w Go jest używany do oczekiwania na zakończenie grupy goroutine.

Jeśli masz kilka goroutine wykonujących zadania równolegle i musisz poczekać na ich zakończenie przed kontynuacją, WaitGroup jest wygodnym narzędziem.

Kanały i goroutine to różne mechanizmy. Kanał służy do komunikacji i synchronizacji między goroutine, a WaitGroup do oczekiwania na ich zakończenie.

Na przykład, jeśli masz goroutine wykonujące zadania i chcesz poczekać, aż wszystkie się zakończą, używasz WaitGroup:

var wg sync.WaitGroup
wg.Add(3) // oczekujemy 3 goroutine

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done()
        // praca goroutine
        fmt.Println("Goroutine", id, "zakończona")
    }(i)
}

wg.Wait() // czekamy na zakończenie wszystkich goroutine

W ten sposób WaitGroup jest używany właśnie dlatego, że są goroutine do synchronizacji, a nie z powodu pojawienia się kanałów.