Sobes.tech
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.