Методы у контекста 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
