Ответ
Используйте select с каналом ctx.Done(), чтобы проверить отмену контекста и выйти из функции. Пример:
func worker(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return ctx.Err() // Возвращаем причину отмены
default:
// Полезная работа
time.Sleep(1 * time.Second)
}
}
}
Для немедленного завершения можно использовать return или panic (в крайних случаях). В HTTP-обработчиках проверяйте ctx.Err() перед долгими операциями.