golang-context

Idiomatic context.Context usage in Golang — propagation through API boundaries, cancellation, timeouts and deadlines, request-scoped values,…

INSTALLATION
npx skills add https://github.com/samber/cc-skills-golang --skill golang-context
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

$27

Creating Contexts

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)

Context Propagation: The Core Principle

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)

}

Deep Dives

-

Cancellation, Timeouts &amp;#x26; 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 &amp;#x26; 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 &amp;#x26; 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.

Cross-References

  • → See the samber/cc-skills-golang@golang-concurrency skill for goroutine cancellation patterns using context
  • → See the samber/cc-skills-golang@golang-database skill for context-aware database operations (QueryContext, ExecContext)
  • → See the samber/cc-skills-golang@golang-observability skill for trace context propagation with OpenTelemetry
  • → See the samber/cc-skills-golang@golang-design-patterns skill for timeout and resilience patterns

Enforce with Linters

Many context pitfalls are caught automatically by linters: govet, staticcheck. → See the samber/cc-skills-golang@golang-lint skill for configuration and usage.

BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card