Что такое контекст в Go? Для чего нужен, какие бывают виды, какие паттерны работы с ним существуют?

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Для чего нужен:

  • Управление временем жизни операций (например, отмена HTTP-запроса при таймауте).
  • Передача сквозных данных (например, идентификаторы запросов для логирования).

Виды контекста:

  • context.Background() — корневой, пустой контекст.
  • context.TODO() — используется, когда контекст еще не определен.
  • Контексты с отменой (WithCancel), с таймаутом (WithTimeout), с дедлайном (WithDeadline), с значениями (WithValue).

Паттерны работы:

  • Передавать контекст первым параметром в функции.
  • Не хранить контекст в структурах, а передавать явно.
  • Проверять отмену через <-ctx.Done().

Пример:

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

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее