Sobes.tech
Senior

Rozhodl jste se napsat WaitGroup, protože se objevil kanál, nebo jste se rozhodli napsat goroutines pro něco?

sobes.tech AI

Odpověď od AI

WaitGroup v Go se používá k počkání na dokončení skupiny gorutin.

Pokud máte několik gorutin, které provádějí paralelní úkoly, a je třeba počkat na jejich dokončení před pokračováním, je WaitGroup užitečným nástrojem.

Kanály a gorutiny jsou odlišné mechanismy. Kanál slouží k komunikaci a synchronizaci mezi gorutinami, zatímco WaitGroup slouží k čekání na jejich dokončení.

Například, pokud máte gorutiny, které vykonávají úkoly, a chcete počkat, až všechny skončí, použijete WaitGroup:

var wg sync.WaitGroup
wg.Add(3) // čekáme na 3 gorutiny

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done()
        // práce gorutiny
        fmt.Println("Gorutina", id, "dokončena")
    }(i)
}

wg.Wait() // čekáme na dokončení všech gorutin

Tímto způsobem se WaitGroup používá právě proto, že je třeba synchronizovat gorutiny na jejich dokončení, nikoli kvůli vzniku kanálů.