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