Context — carries deadlines, cancellation, and values across goroutines.
Creating contexts:
1ctx := context.Background()2ctx, cancel := context.WithTimeout(parent, 5*time.Second)3defer cancel()
Usage:
1func handler(w http.ResponseWriter, r *http.Request) {2 ctx := r.Context()3 dbCtx, cancel := context.WithTimeout(ctx, 3*time.Second)4 defer cancel()56 if err := queryDB(dbCtx); err != nil {7 if errors.Is(err, context.DeadlineExceeded) {8 http.Error(w, "timeout", 504)9 }10 return11 }12}
When to use:
Common mistakes:
cancel().context.Background() in libraries.defer cancel().