Junior — Middle
103
Каким образом можно корректно остановить запусканную горутину, если необходимо, чтобы завершение произошло в зависимости от внешнего сигнала или условия, даже если результат еще не получен?
Сұралған компаниялар
IDT
AI-дан жауап
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.