Junior
21
0
questionbank

Что такое контекст в Go?

Ответ от нейросети sobes.tech

Контекст (context.Context) в Go — объект, который несет дедлайн, сигнал отмены (cancellation signal) и данные, специфичные для запроса. Используется для управления жизненным циклом горутин и передачи информации между ними в процессе выполнения одного запроса/операции.

Основные характеристики:

  • Потокобезопасен: Может безопасно передаваться между горутинами.
  • Иммутабелен: Once created, a Context cannot be changed. Деривативные контексты создаются на основе родительского.
  • Иерархичен: Контексты образуют дерево с корнем (context.Background() или context.TODO()). Отмена родительского контекста приводит к отмене всех дочерних.

Основные функции пакета context:

  • context.Background(): Пустой контекст, обычно используется в main-функции, в верхнеуровневых запросах или при тестировании. Не отменен никогда.
  • context.TODO(): Также пустой контекст. Используется как заглушка, когда неизвестно, какой контекст использовать, или если функциональность контекста еще не реализована.
  • context.WithCancel(parent Context): Возвращает новый дочерний контекст и функцию отмены. Вызов функции отмены отменяет этот контекст и все его дочерние контексты.
  • context.WithDeadline(parent Context, deadline time.Time): Возвращает дочерний контекст, который автоматически отменяется, когда наступает указанное время. Также возвращает функцию отмены для ручной отмены.
  • context.WithTimeout(parent Context, timeout time.Duration): То же, что и WithDeadline, но с указанием длительности.

Контекст (context.Context) в Go — объект, который несет дедлайн, сигнал отмены (cancellation signal) и данные, специфичные для запроса. Используется для управления жизненным циклом горутин и передачи информации между ними в процессе выполнения одного запроса/операции.

Основные характеристики:

  • Потокобезопасен: Может безопасно передаваться между горутинами.
  • Иммутабелен: Once created, a Context cannot be changed. Деривативные контексты создаются на основе родительского.
  • Иерархичен: Контексты образуют дерево с корнем (context.Background() или context.TODO()). Отмена родительского контекста приводит к отмене всех дочерних.

Основные функции пакета context:

  • context.Background(): Пустой контекст, обычно используется в main-функции, в верхнеуровневых запросах или при тестировании. Не отменен никогда.
  • context.TODO(): Также пустой контекст. Используется как заглушка, когда неизвестно, какой контекст использовать, или если функциональность контекста еще не реализована.
  • context.WithCancel(parent Context): Возвращает новый дочерний контекст и функцию отмены. Вызов функции отмены отменяет этот контекст и все его дочерние контексты.
  • context.WithDeadline(parent Context, deadline time.Time): Возвращает дочерний контекст, который автоматически отменяется, когда наступает указанное время. Также возвращает функцию отмены для ручной отмены.
  • context.WithTimeout(parent Context, timeout time.Duration): То же, что и WithDeadline, но с указанием длительности.

Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.

gocontextconcurrencygoroutinecancellationtimeoutapi-boundary