Встречается на 30% собеседований по Go

Что такое контекст

Контекст (context.Context) в Go — это механизм для передачи данных, таймаутов и сигналов отмены между горутинами. Он помогает управлять жизненным циклом операций, особенно в распределённых системах.

Ключевые моменты:

  • Отмена: ctx.Done() позволяет прервать долгие операции.
  • Таймауты: context.WithTimeout устанавливает дедлайн.
  • Значения: context.WithValue передаёт данные (но осторожно!).

Пример:

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

select {
case <-time.After(3 * time.Second):
    fmt.Println("Операция завершена")
case <-ctx.Done():
    fmt.Println("Таймаут операции") // Сработает через 2 секунды
}

Важно: Контекст должен передаваться явно, обычно как первый аргумент функции. Не храните его в структурах!

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы