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

Что такое контекст в Go? Для чего используется? Как работает отмена по таймауту?

Компании, где спрашивали
СБЕРСБЕР

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

sobes.tech AI

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

Основные задачи контекста:

  • отмена операций (например, при таймауте или отмене пользователем),
  • передача значений (например, ID запроса) по цепочке вызовов,
  • установка дедлайнов (таймаутов).

Отмена по таймауту работает так:

  1. Создаётся контекст с дедлайном или таймаутом, например, context.WithTimeout.
  2. По истечении времени автоматически вызывается отмена контекста.
  3. Горутине, которая слушает этот контекст, приходит сигнал отмены через канал Done().
  4. Горутинa должна корректно обработать отмену (например, прервать работу и освободить ресурсы).

Пример:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case <-time.After(3 * time.Second):
    fmt.Println("operation completed")
case <-ctx.Done():
    fmt.Println("operation cancelled or timed out")
}

Здесь операция прервётся через 2 секунды, если не завершится раньше.