Назад к вопросам
Senior
3
Как в горутине корректно отменить контекст?
Компании, где спрашивали
Финтехробот
Ответ от нейросети
sobes.tech AI
В Go для отмены контекста в горутине обычно используют контекст с функцией отмены, созданный через context.WithCancel или context.WithTimeout. Чтобы корректно отменить контекст, нужно вызвать функцию отмены (cancel()) из той горутины, которая контролирует жизненный цикл операции.
Пример:
ctx, cancel := context.WithCancel(context.Background())
go func() {
defer cancel() // отменяем контекст при завершении горутины
// работа с ctx
select {
case <-ctx.Done():
// обработка отмены
return
}
}()
// где-то в другом месте можно вызвать cancel(), чтобы отменить контекст
// cancel()
Важно:
- Вызывать
cancel()обязательно, чтобы избежать утечек ресурсов. - В горутине нужно слушать
ctx.Done()для корректного реагирования на отмену. - Если контекст передается в функцию, которая запускает горутину, обычно функция отмены вызывается снаружи, а горутина реагирует на
ctx.Done().