Sobes.tech
Назад к вопросам
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() // дождаться завершения всех горутин

Таким образом, программа гарантированно дождется завершения всех горутин, прежде чем продолжить или завершиться.