Назад к вопросам
Junior — Middle
77
Каким образом можно корректно остановить запусканную горутину, если необходимо, чтобы завершение произошло в зависимости от внешнего сигнала или условия, даже если результат еще не получен?
Компании, где спрашивали
IDT
Ответ от нейросети
sobes.tech AI
Для корректной остановки запущенной горутины по внешнему сигналу или условию в Go обычно используют контекст (context.Context) или каналы для передачи сигнала отмены.
Пример с использованием контекста:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Получен сигнал отмены, завершаем горутину
return
default:
// Выполняем работу
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// В какой-то момент вызываем cancel(), чтобы остановить горутину
cancel()
}
Такой подход позволяет горутине регулярно проверять, не был ли отправлен сигнал остановки, и завершаться корректно, даже если результат еще не получен. Аналогично можно использовать канал для передачи сигнала остановки, но context является более идиоматичным и удобным способом в Go.