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.