Senior
Ar nusprendei parašyti WaitGroup, nes atsirado kanalas, ar dėl kažko nusprendei parašyti goroutines?
sobes.tech AI
Atsakymas iš AI
Go kalboje WaitGroup naudojamas laukiant, kol baigsis gorutinos grupė.
Jei turite kelias gorutinas, kurios vykdo paralelinius uždavinius, ir norite palaukti jų pabaigos prieš tęsdami, WaitGroup yra patogus įrankis.
Kanalai ir gorutinos yra skirtingi mechanizmai. Kanalas skirtas komunikacijai ir sinchronizacijai tarp gorutinų, o WaitGroup – jų pabaigos laukimui.
Pavyzdžiui, jei turite gorutinas, kurios atlieka užduotis, ir norite palaukti, kol jos visos baigsis, naudokite WaitGroup:
var wg sync.WaitGroup
wg.Add(3) // laukiame 3 gorutinų
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
// gorutinos darbas
fmt.Println("Gorutina", id, "baigta")
}(i)
}
wg.Wait() // laukiame, kol visos gorutinos baigsis
Taip, WaitGroup naudojamas būtent todėl, kad yra gorutinos, kurias reikia sinchronizuoti jų pabaigoje, o ne dėl kanalų atsiradimo.