From golang-dev
Guides idiomatic context.Context usage in Go: creation, propagation, cancellation, timeouts, deadlines, values, and cross-service tracing. For any Go code using contexts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/golang-dev:golang-contextThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Community default.** A company skill that explicitly supersedes `samber/cc-skills-golang@golang-context` skill takes precedence.
Community default. A company skill that explicitly supersedes
samber/cc-skills-golang@golang-contextskill takes precedence.
context.Context is Go's mechanism for propagating cancellation signals, deadlines, and request-scoped values across API boundaries and between goroutines. Think of it as the "session" of a request — it ties together every operation that belongs to the same unit of work.
ctx MUST be the first parameter, named ctx context.Contextnil context — use context.TODO() if unsurecancel() MUST always be deferred immediately after WithCancel/WithTimeout/WithDeadlinecontext.Background() MUST only be used at the top level (main, init, tests)context.TODO() as a placeholder when you know a context is needed but don't have one yetcontext.Background() in the middle of a request pathcontext.WithoutCancel (Go 1.21+) when spawning background work that must outlive the parent request| Situation | Use |
|---|---|
| Entry point (main, init, test) | context.Background() |
| Function needs context but caller doesn't provide one yet | context.TODO() |
| Inside an HTTP handler | r.Context() |
| Need cancellation control | context.WithCancel(parentCtx) |
| Need a deadline/timeout | context.WithTimeout(parentCtx, duration) |
The most important rule: propagate the same context through the entire call chain. When you propagate correctly, cancelling the parent context cancels all downstream work automatically.
// ✗ Bad — creates a new context, breaking the chain
func (s *OrderService) Create(ctx context.Context, order Order) error {
return s.db.ExecContext(context.Background(), "INSERT INTO orders ...", order.ID)
}
// ✓ Good — propagates the caller's context
func (s *OrderService) Create(ctx context.Context, order Order) error {
return s.db.ExecContext(ctx, "INSERT INTO orders ...", order.ID)
}
Cancellation, Timeouts & Deadlines — How cancellation propagates: WithCancel for manual cancellation, WithTimeout for automatic cancellation after a duration, WithDeadline for absolute time deadlines. Patterns for listening (<-ctx.Done()) in concurrent code, AfterFunc callbacks, and WithoutCancel for operations that must outlive their parent request (e.g., audit logs).
Context Values & Cross-Service Tracing — Safe context value patterns: unexported key types to prevent namespace collisions, when to use context values (request ID, user ID) vs function parameters. Trace context propagation: OpenTelemetry trace headers, correlation IDs for log aggregation, and marshaling/unmarshaling context across service boundaries.
Context in HTTP Servers & Service Calls — HTTP handler context: r.Context() for request-scoped cancellation, middleware integration, and propagating to services. HTTP client patterns: NewRequestWithContext, client timeouts, and retries with context awareness. Database operations: always use *Context variants (QueryContext, ExecContext) to respect deadlines.
samber/cc-skills-golang@golang-concurrency skill for goroutine cancellation patterns using contextsamber/cc-skills-golang@golang-database skill for context-aware database operations (QueryContext, ExecContext)samber/cc-skills-golang@golang-observability skill for trace context propagation with OpenTelemetrysamber/cc-skills-golang@golang-design-patterns skill for timeout and resilience patternsMany context pitfalls are caught automatically by linters: govet, staticcheck. → See the samber/cc-skills-golang@golang-linter skill for configuration and usage.
npx claudepluginhub jylhis/claude-marketplace --plugin golang-devGuides idiomatic context.Context usage in Go: propagation through API boundaries, cancellation, timeouts, request-scoped values, and background work with WithoutCancel. Helps debug leaked contexts and choose between Background/TODO/WithoutCancel.
Guides context.Context usage in Go: first param in signatures, avoid storing in structs or custom types, values vs parameters, cancellation, timeouts, request-scoped data.
Provides idiomatic Go patterns and best practices for simplicity, zero values, interfaces, error handling. Useful for writing, reviewing, refactoring, designing Go code.