Sobes.tech
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("Све горутине су завршене")