Sobes.tech
Назад к вопросам
Senior
3

Как реализуется отмена контекста? Что внутри происходит?

Компании, где спрашивали
Финтехробот

Ответ от нейросети

sobes.tech AI

В Go контекст (context.Context) используется для управления временем жизни операций, передачи сигналов отмены и дедлайнов.

Отмена контекста реализуется через создание дочернего контекста с функцией отмены, которая при вызове сигнализирует всем слушателям о необходимости прекратить работу.

Внутри происходит следующее:

  1. Создаётся канал, который закрывается при отмене контекста.
  2. Все функции, получившие этот контекст, могут слушать этот канал и реагировать на его закрытие (например, прерывать операции).
  3. Отмена может быть вызвана вручную (через вызов функции cancel) или автоматически при достижении дедлайна.

Пример:

ctx, cancel := context.WithCancel(context.Background())

// Запускаем горутину, которая слушает отмену
go func() {
    <-ctx.Done() // ждем сигнал отмены
    fmt.Println("Context cancelled")
}()

// В какой-то момент вызываем отмену
cancel()

Таким образом, отмена контекста — это механизм координации между горутинами через канал, сигнализирующий о необходимости завершения работы.