Junior — Middle
Можете ли објаснити како се користи механизам чекања на завршетак више горутина у Go-у уз помоћ WaitGroup-а?
sobes.tech АИ
Одговор од АИ
У Go, за очекивање да заврше више горутина, користи се тип sync.WaitGroup. Он омогућава да се "претплатите" на више горутина и блокира извршавање док све не заврше.
Главне методе WaitGroup:
- Add(n int) — повећава бројач за n, обично се позива пре покретања горутина.
- Done() — смањује бројач за 1, позива се на крају сваке горутине.
- Wait() — блокира извршавање док бројач не достигне 0.
Пример употребе:
var wg sync.WaitGroup
wg.Add(3) // очекујемо 3 горутине
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // сигнализирање завршетка
fmt.Printf("Горутина %d ради\n", id)
// неки посао
}(i)
}
wg.Wait() // чекамо да све горутине заврше
fmt.Println("Све горутине су завршене")