← 返回 Skills 市场
samber

Golang Context

作者 Samuel Berthe · GitHub ↗ · v1.1.1 · MIT-0
cross-platform ✓ 安全检测通过
185
总下载
0
收藏
0
当前安装
2
版本数
在 OpenClaw 中安装
/install golang-context
功能描述
Idiomatic context.Context usage in Golang — creation, propagation, cancellation, timeouts, deadlines, context values, and cross-service tracing. Apply when w...
使用说明 (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.

安全使用建议
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.
功能分析
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.
能力评估
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.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install golang-context
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /golang-context 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
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.
元数据
Slug golang-context
版本 1.1.1
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 2
常见问题

Golang Context 是什么?

Idiomatic context.Context usage in Golang — creation, propagation, cancellation, timeouts, deadlines, context values, and cross-service tracing. Apply when w... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 185 次。

如何安装 Golang Context?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install golang-context」即可一键安装,无需额外配置。

Golang Context 是免费的吗?

是的,Golang Context 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Golang Context 支持哪些平台?

Golang Context 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Golang Context?

由 Samuel Berthe(@samber)开发并维护,当前版本 v1.1.1。

💬 留言讨论