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