Sobes.tech
Назад к вопросам
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().