IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Методы у контекста Golang

Методы context.Context в Go

В языке Go context.Context используется для управления временем выполнения горутин, передачи дедлайнов, тайм-аутов и сигналов отмены. Рассмотрим все доступные методы, включая новые версии Go.

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

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

Методы у стандартных реализаций контекста

  • context.WithCancel(parent Context) (Context, CancelFunc) – создаёт контекст, который можно отменить вручную.
  • context.WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) – создаёт контекст с тайм-аутом.
  • context.WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) – аналогично WithTimeout(), но с конкретным дедлайном.
  • context.WithValue(parent Context, key, value any) Context – создаёт контекст с дополнительными данными.

Новые методы в Go 1.21+

  • context.AfterFunc(f func()) (stop func()) – регистрирует функцию f, которая вызовется после отмены контекста.

Новый метод в Go 1.22: WithoutCancel

  • context.WithoutCancel(parent context.Context) context.Context – создаёт контекст, который не отменяется при завершении родительского.
Используйте WithoutCancel, если вам нужно передать контекст, который не зависит от родителя, например, для логирования.

Вывод

  • Базовые методы позволяют управлять временем жизни контекста.
  • Расширенные методы (WithCancel, WithTimeout, WithDeadline, WithValue) позволяют гибко контролировать выполнение.
  • Новые методы в Go 1.21+ (AfterFunc) и Go 1.22+ (WithoutCancel) добавляют новые возможности.

Используйте контексты эффективно, чтобы управлять горутинами и ресурсами в ваших Go-приложениях!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *