context.Context — механизм для передачи дедлайнов, отмены и метаданных через цепочку вызовов.
// С таймаутом
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
// С отменой
ctx, cancel := context.WithCancel(ctx)
// С данными
ctx = context.WithValue(ctx, "userID", 42)
Правила:
- Контекст — первый параметр функции:
func DoWork(ctx context.Context, ...) - Не храни контекст в структурах
- Всегда вызывай cancel (defer cancel())
- context.Background() — корневой контекст
- context.TODO() — заглушка, когда непонятно какой контекст использовать