Назад к вопросам
Junior — Middle
78
Каким образом можно гарантированно завершить выполнение всех запущенных горутин в программе?
Ответ от нейросети
sobes.tech AI
В Go нет встроенного способа принудительно завершить горутину извне. Чтобы гарантированно дождаться завершения всех запущенных горутин, обычно используют синхронизацию с помощью sync.WaitGroup.
Принцип работы:
- Перед запуском каждой горутины вызывается
wg.Add(1). - Внутри горутины в конце вызывается
wg.Done(). - В главной функции вызывается
wg.Wait(), который блокирует выполнение до тех пор, пока счетчик не станет равен нулю.
Пример:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// работа горутины
}()
wg.Wait() // дождаться завершения всех горутин
Таким образом, программа гарантированно дождется завершения всех горутин, прежде чем продолжить или завершиться.