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

Что такое контекст (context) в Go и зачем он нужен?

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

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

sobes.tech AI

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

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

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

Пример использования:

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

select {
case result := <-doWork(ctx):
    fmt.Println("Результат:", result)
case <-ctx.Done():
    fmt.Println("Операция отменена или истек таймаут")
}

Здесь ctx передаётся в функцию doWork, которая может прервать свою работу, если контекст отменён или истёк таймаут. Это помогает управлять временем жизни операций и ресурсами в конкурентных программах.