go-context
Use when working with context.Context in Go — placement in signatures, propagating cancellation and deadlines, and storing values in context vs parameters. Also use when cancelling long-running operations, setting timeouts, or passing request-scoped data, even if they don't mention context.Context d
By cxuu · 1,077 installs
npx skills add cxuu/golang-skills --skill go-context
Source repository · Upstream listing
Go Context Usage
Compatibility: context has been in the standard library since Go 1.7.
Resource Routing
references/PATTERNS.md Read when deriving contexts, checking cancellation, handling HTTP request contexts, or using typed context value keys.
Context as First Parameter
Functions that use a Context should accept it as their first parameter :
This is a strong convention in Go that makes context flow visible and consistent
across codebases.
Don't Store Context in Structs
Do not add a Context member to a struct type. Instead, pass ctx as a parameter
to each method that needs it:
Exception : Methods whose signature must match an interface in the standard
library or a third party library may need to work around this.
Don't Create Custom Context Types
Do not create custom Context types or use interfaces other than context.Context
in function signatures:
Where to Put Application Data
Consider these options in order of preference:
1. Function parameters — most explicit and type safe
2. Receiver — for data that belongs to the type
3. Globals — for truly global configuration (use sparingly)
4. Context value — only for request scoped data
Context values are appropriate for:
Request IDs and trace IDs
Authentication/authorization info that flows with requests
Deadlines and cancellation signals
Context values are not appropriate for:
Optional function parameters
Data that could be passed explicitly
Configuration that doesn't vary per request
Common Patterns
Deriving Contexts
Always defer cancel() immediately after creating a derived context:
Checking Cancellation
Context Immutability
Contexts are immutable — it's safe to pass the same ctx to multiple
concurrent calls that share the same deadline and cancellation signal.
Related Skills
Goroutine coordination : See [go concurrency](../go concurrency/SKILL.md) when using context for goroutine cancellation, select based timeouts, or errgroup
Error handling : See [go error handling](../go error handling/SKILL.md) when deciding how to wrap or return ctx.Err() cancellation errors
Interface design : See [go interfaces](../go interfaces/SKILL.md) when designing APIs that accept context alongside interfaces
Request scoped logging : See [go logging](../go logging/SKILL.md) when injecting loggers into context or adding request IDs to structured log output