Назад к вопросам
Junior — Middle
79
Каким образом можно остановить выполнение горутины, если до нее так и не дошло ожидаемое значение?
Компании, где спрашивали
IDT
Ответ от нейросети
sobes.tech AI
В Go для остановки горутины, которая ожидает значение, но это значение может не прийти, обычно используют каналы с таймаутом или контекст с отменой.
Пример с таймаутом через select и time.After:
select {
case val := <-ch:
// получили значение, продолжаем работу
case <-time.After(time.Second * 5):
// таймаут, прекращаем работу горутины
}
Другой способ — использовать контекст (context.Context), который можно отменить извне:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// обработать val
case <-ctx.Done():
// остановка горутины
}
}()
// где-то в коде вызываем cancel(), чтобы остановить горутину
Таким образом, горутина не будет висеть в ожидании бесконечно и сможет корректно завершиться.