Методы у контекста 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
, которая вызовется после отмены контекста.
1 2 3 4 5 |
ctx, cancel := context.WithCancel(context.Background()) stop := ctx.AfterFunc(func() { fmt.Println("Контекст был отменён!") }) cancel() // Вызывает функцию AfterFunc() |
Новый метод в Go 1.22: WithoutCancel
context.WithoutCancel(parent context.Context) context.Context
– создаёт контекст, который не отменяется при завершении родительского.
1 2 3 |
parent, cancel := context.WithCancel(context.Background()) child := context.WithoutCancel(parent) // Этот контекст не отменится с родителем cancel() // Отменяем родительский контекст, но child продолжает работать |
WithoutCancel
, если вам нужно передать контекст, который не зависит от родителя, например, для логирования.
Вывод
- Базовые методы позволяют управлять временем жизни контекста.
- Расширенные методы (
WithCancel
,WithTimeout
,WithDeadline
,WithValue
) позволяют гибко контролировать выполнение. - Новые методы в Go 1.21+ (
AfterFunc
) и Go 1.22+ (WithoutCancel
) добавляют новые возможности.
Используйте контексты эффективно, чтобы управлять горутинами и ресурсами в ваших Go-приложениях!
Recommended Posts
Golang map и Swiss Table
16.03.2025