Middle
37
0
questionbank

Как устроены контексты в языке Go?

Answer from sobes.tech neural network

Контекст (context.Context) в Go используется для передачи информации о дедлайнах, отмене и других данных между API границами. Он представляет собой дерево: каждый контекст является дочерним по отношению к другому, кроме корневого (context.Background() или context.TODO()).

Основные методы интерфейса context.Context:

  • Deadline() (deadline time.Time, ok bool): Возвращает дедлайн контекста.
  • Done() <-chan struct{}: Возвращает канал, который закрывается при отмене контекста.
  • Err() error: Возвращает ошибку, которая привела к отмене контекста.
  • Value(key any) any: Возвращает значение, связанное с ключом в контексте.

Создаются с помощью функций пакета context:

  • context.Background(): Корневой пустой контекст, используется как основа для главного процесса.
  • context.TODO(): Используется как заглушка, когда неизвестно, какой контекст использовать.
  • context.WithCancel(parent Context): Создает дочерний контекст и функцию отмены.
  • context.WithDeadline(parent Context, d time.Time): Создает дочерний контекст с дедлайном.
  • context.WithTimeout(parent Context, timeout time.Duration): Создает дочерний контекст с таймаутом.
  • context.WithValue(parent Context, key, val any): Создает дочерний контекст со значением.

Основные реализации Context:

  • emptyCtx: Базовый, не отменяемый и без значений. Используется Background и TODO.
  • cancelCtx: Поддерживает отмену. Состоит из базового контекста и канала отмены.
  • timerCtx: Поддерживает дедлайн/таймаут. Содержит cancelCtx и таймер.
  • valueCtx: Поддерживает перед

Контекст (context.Context) в Go используется для передачи информации о дедлайнах, отмене и других данных между API границами. Он представляет собой дерево: каждый контекст является дочерним по отношению к другому, кроме корневого (context.Background() или context.TODO()).

Основные методы интерфейса context.Context:

  • Deadline() (deadline time.Time, ok bool): Возвращает дедлайн контекста.
  • Done() <-chan struct{}: Возвращает канал, который закрывается при отмене контекста.
  • Err() error: Возвращает ошибку, которая привела к отмене контекста.
  • Value(key any) any: Возвращает значение, связанное с ключом в контексте.

Создаются с помощью функций пакета context:

  • context.Background(): Корневой пустой контекст, используется как основа для главного процесса.
  • context.TODO(): Используется как заглушка, когда неизвестно, какой контекст использовать.
  • context.WithCancel(parent Context): Создает дочерний контекст и функцию отмены.
  • context.WithDeadline(parent Context, d time.Time): Создает дочерний контекст с дедлайном.
  • context.WithTimeout(parent Context, timeout time.Duration): Создает дочерний контекст с таймаутом.
  • context.WithValue(parent Context, key, val any): Создает дочерний контекст со значением.

Основные реализации Context:

  • emptyCtx: Базовый, не отменяемый и без значений. Используется Background и TODO.
  • cancelCtx: Поддерживает отмену. Состоит из базового контекста и канала отмены.
  • timerCtx: Поддерживает дедлайн/таймаут. Содержит cancelCtx и таймер.
  • valueCtx: Поддерживает перед

Register or sign in to get access to full answers for all questions from the question bank.

contextconcurrencyerror-handlingcancellation