Sobes.tech
Junior — Middle

Можете ли да обясните как работи механизма за изчакване за завършване на няколко горутини в Go с помощта на WaitGroup?

sobes.tech AI

Отговор от AI

В 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("Всички горутини са завършили")