Sobes.tech
Senior

Vai nolēmi rakstīt WaitGroup, jo parādījās kanāls vai tāpēc, ka nolēmi rakstīt goroutines kaut kam?

sobes.tech AI

Atbilde no AI

Go valodā WaitGroup tiek izmantots, lai gaidītu, kamēr gorutīnu grupa pabeigs darbu.

Ja jums ir vairākas gorutinas, kas veic paralēlas uzdevumus, un jums jāgaida, līdz tās visas pabeigs, tad WaitGroup ir ērts rīks.

Kanāli un gorutinas ir dažādi mehānismi. Kanāls tiek izmantots komunikācijai un sinhronizācijai starp gorutīnām, bet WaitGroup – to pabeigšanas gaidīšanai.

Piemēram, ja jums ir gorutinas, kas veic uzdevumus, un jūs vēlaties gaidīt, kamēr visas pabeigs, izmantojiet WaitGroup:

var wg sync.WaitGroup
wg.Add(3) // gaidām 3 gorutinas

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done()
        // gorutinas darbs
        fmt.Println("Gorutina", id, "pabeigta")
    }(i)
}

wg.Wait() // gaidām, kamēr visas gorutinas pabeigsies

Tādējādi, WaitGroup tiek izmantots tieši tāpēc, ka ir gorutinas, kuras nepieciešams sinhronizēt, nevis tāpēc, ka ir parādījušies kanāli.