← Back to Skills Marketplace
samber

Golang Context

by Samuel Berthe · GitHub ↗ · v1.1.1 · MIT-0
cross-platform ✓ Security Clean
185
Downloads
0
Stars
0
Active Installs
2
Versions
Install in OpenClaw
/install golang-context
Description
Idiomatic context.Context usage in Golang — creation, propagation, cancellation, timeouts, deadlines, context values, and cross-service tracing. Apply when w...
README (SKILL.md)

Community default. A company skill that explicitly supersedes samber/cc-skills-golang@golang-context skill takes precedence.

Go context.Context Best Practices

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.

Best Practices Summary

  1. The same context MUST be propagated through the entire request lifecycle: HTTP handler → service → DB → external APIs
  2. ctx MUST be the first parameter, named ctx context.Context
  3. NEVER store context in a struct — pass explicitly through function parameters
  4. NEVER pass nil context — use context.TODO() if unsure
  5. cancel() MUST always be deferred immediately after WithCancel/WithTimeout/WithDeadline
  6. context.Background() MUST only be used at the top level (main, init, tests)
  7. Use context.TODO() as a placeholder when you know a context is needed but don't have one yet
  8. NEVER create a new context.Background() in the middle of a request path
  9. Context value keys MUST be unexported types to prevent collisions
  10. Context values MUST only carry request-scoped metadata — NEVER function parameters
  11. Use context.WithoutCancel (Go 1.21+) when spawning background work that must outlive the parent request

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 & Deadlines — How cancellation propagates: WithCancel for manual cancellation, WithTimeout for automatic cancellation after a duration, WithDeadline for absolute time deadlines. Patterns for listening (\x3C-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.

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-linter skill for configuration and usage.

Usage Guidance
This skill is documentation and linting guidance for Go's context usage and appears internally consistent. It asks for nothing sensitive and has no installer. Before installing, verify the homepage/repo if you need provenance. Note that as an AI coding skill it may be invoked autonomously and can read/edit code (allowed-tools lists file and bash operations) — review any code changes it proposes and run your usual tests and linters (govet/staticcheck/golangci-lint) before merging. If you prefer to avoid autonomous edits, restrict agent permissions or disable model invocation for this skill.
Capability Analysis
Type: OpenClaw Skill Name: golang-context Version: 1.1.1 The golang-context skill bundle provides idiomatic guidance and best practices for using Go's context package. The documentation (SKILL.md and references/) and evaluation cases (evals/evals.json) focus on standard patterns like context propagation, avoiding resource leaks with cancel functions, and using unexported types for context keys. No malicious intent, data exfiltration, or harmful instructions were detected.
Capability Assessment
Purpose & Capability
Name/description (Go context best practices) align with the content: guidance, examples, and tests about context creation, propagation, cancellation, timeouts, and values. It only declares the 'go' binary as required, which is appropriate for a Go coding skill.
Instruction Scope
SKILL.md contains focused coding guidance and example snippets. It does not instruct the agent to read unrelated files, exfiltrate data, request secrets, or call external endpoints. The included evaluation prompts and reference files are consistent with the skill's stated purpose.
Install Mechanism
No install spec is present (instruction-only). Nothing will be downloaded or written to disk by an installer step, which minimizes install-time risk.
Credentials
The skill requires no environment variables, credentials, or config paths. There are no disproportionate or unrelated secrets requested.
Persistence & Privilege
always is false and the skill does not request any special persistent privileges or modifications to other skills. It does allow the agent to invoke the skill autonomously (disable-model-invocation: false), which is the platform default and acceptable here given the low-risk scope.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install golang-context
  3. After installation, invoke the skill by name or use /golang-context
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.1.1
- Bumped skill version to 1.1.1 in metadata. - No changes to guidelines, usage, or functionality—documentation only.
v1.1.0
- Expanded and clarified best practices for context.Context usage in Go, including creation, propagation, cancellation, and context values. - Added deep dives on cancellation, timeouts, context values, tracing, HTTP/server patterns, and database usage. - Included cross-references to related skills for concurrency, database, observability, design patterns, and linters. - Updated metadata for compatibility and usage guidance.
Metadata
Slug golang-context
Version 1.1.1
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 2
Frequently Asked Questions

What is Golang Context?

Idiomatic context.Context usage in Golang — creation, propagation, cancellation, timeouts, deadlines, context values, and cross-service tracing. Apply when w... It is an AI Agent Skill for Claude Code / OpenClaw, with 185 downloads so far.

How do I install Golang Context?

Run "/install golang-context" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Golang Context free?

Yes, Golang Context is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Golang Context support?

Golang Context is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Golang Context?

It is built and maintained by Samuel Berthe (@samber); the current version is v1.1.1.

💬 Comments