Senior
Úgy döntöttél, hogy írni fogod a WaitGroup-ot, mert megjelent egy csatorna, vagy mert valamiért goroutine-okat írtál?
sobes.tech MI
Válasz az MI-től
A WaitGroup a Go-ban arra szolgál, hogy egy goroutine-csoport befejezését várja meg.
Ha több goroutine fut párhuzamosan, és meg kell várni, hogy mind befejeződjön, mielőtt folytatnád, a WaitGroup hasznos eszköz.
A csatornák és a goroutine-ok külön mechanizmusok. A csatorna kommunikációra és szinkronizációra szolgál a goroutine-ok között, míg a WaitGroup arra, hogy várjon a goroutine-ok befejezésére.
Például, ha vannak goroutine-ok, amelyek feladatokat hajtanak végre, és meg akarod várni, hogy mind befejeződjön, használod a WaitGroup-ot:
var wg sync.WaitGroup
wg.Add(3) // 3 goroutine-t várunk
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
// goroutine munka
fmt.Println("Goroutine", id, "befejeződött")
}(i)
}
wg.Wait() // várunk, amíg minden goroutine be nem fejeződik
Így a WaitGroup pontosan azért van, mert goroutine-okat kell szinkronizálni a befejezésük során, nem pedig a csatornák megjelenése miatt.