Назад к вопросам
Mail.ru
Junior — Middle
73
Каким образом можно корректно остановить выполнение горутин с использованием контекста в Go?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для корректной остановки горутин в Go часто используют пакет context. Создается контекст с возможностью отмены (context.WithCancel), который передается в горутину. Внутри горутины периодически проверяется состояние контекста через <-ctx.Done(). Когда вызывается функция отмены, канал Done() закрывается, и горутина может корректно завершить работу.
Пример:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Горутина остановлена")
return
default:
// выполнение работы
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// через некоторое время останавливаем горутину
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // чтобы горутина успела завершиться
}
Такой подход позволяет безопасно и контролируемо завершать горутины без использования небезопасных методов.