Sobes.tech
Senior

Rozhodol si sa napísať WaitGroup, pretože sa objavil kanál alebo si sa rozhodol napísať goroutines pre niečo?

sobes.tech AI

Odpoveď od AI

WaitGroup v Go sa používa na čakanie na dokončenie skupiny gorutín.

Ak máte niekoľko gorutín, ktoré vykonávajú paralelné úlohy, a je potrebné počkať na ich dokončenie pred pokračovaním, WaitGroup je užitočný nástroj.

Kanály a gorutiny sú odlišné mechanizmy. Kanál slúži na komunikáciu a synchronizáciu medzi gorutinami, zatiaľ čo WaitGroup slúži na čakanie na ich dokončenie.

Napríklad, ak máte gorutiny, ktoré vykonávajú úlohy, a chcete počkať, kým všetky neskončia, použijete WaitGroup:

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

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

wg.Wait() // čakáme na dokončenie všetkých gorutín

Týmto spôsobom sa WaitGroup používa presne preto, že je potrebné synchronizovať gorutiny pri ich ukončení, nie kvôli vzniku kanálov.