К основному содержанию
скилл CX Codex

golang-context — скилл для Claude Code: context.Context в Go

Скилл для идиоматичной работы с context.Context в Go: проброс через слои, отмена, таймауты и значения запроса. Пригодится при проектировании API и отладке утечек контекста.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add samber/cc-skills-golang --skill golang-context -a claude-code
Открыть на GitHub

Что делает golang-context

Скилл описывает, как правильно передавать context.Context через границы API и между горутинами. Главное правило — один и тот же контекст идёт по всей цепочке вызовов: HTTP-обработчик, сервис, база, внешние API. Любое звено, создавшее свежий контекст, продолжит работу после ухода клиента.

Внутри — сводка из десяти практик и три разбора: отмена с таймаутами и дедлайнами, значения контекста и трассировка между сервисами, контекст в HTTP-серверах и вызовах БД. Отдельно разобраны context.Background(), context.TODO() и context.WithoutCancel для фоновой работы, которая должна пережить запрос. Есть примеры кода: как context.Background() внутри сервиса рвёт цепочку и почему вместо него нужен ctx вызывающего.

Скилл требует установленного Go: без go в PATH он не запустится. Для линта упоминаются govet и staticcheck. context.WithoutCancel появился в Go 1.21, на более старых версиях этот приём не сработает.

Какие задачи решает

  • пробросить один контекст через обработчик, сервис и базу данных
  • разобраться, почему запрос продолжает работать после отмены клиентом
  • выбрать между context.Background, context.TODO и context.WithoutCancel
  • запустить фоновую задачу, которая переживёт завершение HTTP-запроса
  • объявить ключи значений контекста без конфликтов между пакетами

Примеры запросов агенту

  • Спроектируй проброс context.Context через слои сервиса заказов
  • Почему у меня утекает контекст в этом обработчике? Проверь по скиллу
  • Нужна фоновая запись аудит-лога после ответа клиенту — как правильно с контекстом?

Как установить golang-context

1Через Skills CLI (Vercel)

npx skills add samber/cc-skills-golang --skill golang-context -a claude-code

2Вручную: положить файлы

~/.claude/skills/golang-context/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/golang-context/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о golang-context

Как установить golang-context в Claude Code?

Выполните npx skills add samber/cc-skills-golang --skill golang-context -a claude-code. Файл скилла появится по пути ~/.claude/skills/golang-context/SKILL.md.

Что делает скилл golang-context?

Разбирает идиоматичное использование context.Context в Go: проброс через границы API, отмену, таймауты и дедлайны, значения уровня запроса и context.WithoutCancel для фоновой работы.

Какая версия Go нужна для context.WithoutCancel?

context.WithoutCancel появился в Go 1.21. На более старых версиях этот приём из скилла не сработает.

Исходный текст

SKILL.md · MIT
---
name: golang-context
description: "Idiomatic context.Context usage in Golang — propagation through API boundaries, cancellation, timeouts and deadlines, request-scoped values, context.WithoutCancel for background work outliving requests. Apply when designing context propagation across layers, debugging leaked or unexpired contexts, choosing between context.Background/TODO/WithoutCancel, or storing values in context. Not for code that merely accepts ctx as first parameter."
user-invocable: true
license: MIT
compatibility: Designed for Claude Code, Codex or similar harness, and for projects using Golang.
metadata:
  author: samber
  version: "1.3.1"
  openclaw:
    emoji: "🔗"
    homepage: https://github.com/samber/cc-skills-golang
    requires:
      bins:
        - go
    install: []
allowed-tools: Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent
paths:
  - "**/*.go"
---

> **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. Propagate the same context through the entire request lifecycle: HTTP handler → service → DB → external APIs — any link that starts a fresh context keeps working after the client is gone.
2. Take `ctx` as the first parameter, named `ctx context.Context` — the fixed position is what makes context-aware APIs recognizable at a glance and what linters check.
3. Pass context through function parameters instead of storing it in a struct — the struct outlives the request that filled it, so later calls reuse a context that is already cancelled or belongs to someone else.
4. Pass `context.TODO()` rather than a `nil` context — `nil` panics on the first `Done()` or `Value()` call, far from the caller that passed it.
5. Call `cancel()` on all control-flow paths for `WithCancel`/`WithTimeout`/`WithDeadline`, unless ownership of the context and cancel function is explicitly returned or transferred — an uncalled `cancel()` keeps the child attached to its parent and leaks its timer until the parent finishes.
6. Create `context.Background()` only at top-level entry points (main, init, tests). Deeper in the call chain — especially mid-request — it detaches the work from the caller's deadline and cancellation, the propagation break shown below.
7. Use `context.TODO()` as a placeholder when a context is needed but none exists yet — it marks the gap for a later fix instead of hiding it behind a `Background()` that looks deliberate.
8. Declare context value keys as unexported types — with a plain `string` key, two packages using `"user"` silently overwrite each other.
9. Carry only request-scoped metadata in context values, never function parameters — values retrieved through `Value()` lose compile-time typing and disappear from the function signature.
10. Use `context.WithoutCancel` (Go 1.21+) when spawning background work that must outlive the parent request — otherwise the handler returning cancels the audit log or cleanup just started.

## 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.

```go
// ✗ 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](./references/cancellation.md)** — 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](./references/values-tracing.md)** — 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](./references/http-services.md)** — 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.

© samber · MIT · samber/cc-skills-golang

Похожие скиллы

Все скиллы по теме «Языки программирования» →
migrate-to-shoehorn Matt Pocock Переводит type assertions с as в тестах на функции из @total-typescript/shoehorn. Нужен для частичных объектов и намеренно неверных данных в проверках. 475 388установок write-swift emilkowalski Скилл помогает писать, проверять и переносить код на Swift с учётом модели языка. Подойдёт, когда нужно разобраться с конкурентностью, ошибкой или циклом удержания объектов. CX Codex +1 119 300установок megacave JuliusBrussee Переводит ответы ассистента на классический китайский язык (вэньянь) для экономии места на экране. Активируется командами /megacave или /caveman wenyan. CX Codex +1 25 400установок find-docs upstash Тянет актуальную документацию, справочники API и примеры кода для любой библиотеки через Context7 CLI. Пригодится, когда агент отвечает по устаревшим данным обучения. CX Codex +1 9 400установок typescript-advanced-types Seth Hobson Помогает агенту писать сложную типизацию TypeScript: generics, conditional types и преобразования типов. Нужен для библиотек, API-клиентов и строгих конфигураций. CX Codex 92 169установок smart-explore thedotmack Структурно ищет функции и классы через tree-sitter. Пригодится, когда нужно разобраться в кодовой базе без чтения всех файлов. CX Codex +1 7 300установок

Из того же набора44

Весь набор →
golang-security Находит уязвимости в коде на Go, выстраивает аудит по STRIDE и DREAD и помогает закрывать инъекции, утечки секретов и ошибки в криптографии. CX Codex +1 42 300установок golang-design-patterns Скилл подсказывает идиоматичные Go-паттерны для API, жизненного цикла ресурсов, graceful shutdown и архитектуры. Пригодится при проектировании и ревью кода. CX Codex +1 42 100установок golang-performance Помогает находить и устранять узкие места в Go-коде: сокращает аллокации памяти, оптимизирует горячие циклы и проверяет результаты замеров. CX Codex +1 41 900установок golang-concurrency Скилл задаёт правила для конкурентного кода на Go: жизненный цикл горутин, каналы и select, мьютексы, errgroup, singleflight, воркер-пулы и fan-out/fan-in пайплайны. CX Codex +1 41 800установок golang-database Набор правил для работы с реляционными базами данных в Go через database/sql, sqlx и pgx. Помогает писать запросы без ORM и проверять утечки соединений. CX Codex +1 40 800установок golang-naming Скилл задаёт правила имён в Go: пакеты, типы, ошибки, булевы поля и тесты. Пригодится при написании, ревью и рефакторинге кода. CX Codex +1 40 900установок golang-safety Скилл помогает писать защитный код на Go: ловит ошибки с nil-указателями, неинициализированными картами, проблемами с append и числовыми переполнениями до того, как они сломают программу. CX Codex +1 40 600установок golang-project-layout Скилл помогает организовать Go-проект по соглашениям: директории cmd/, internal/, pkg/, именование модулей, go.work для монорепозиториев. Спросит архитектуру и способ внедрения зависимостей, потом создаст файлы и конфиг. CX Codex +1 40 400установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой