Golang 上下文测试
- 作者仓库星标 0
- 作者仓库 skills-registry
Golang Patterns
Idiomatic Go reference pack — concurrency, interfaces, generics, testing, project structure, plus the anti-patterns agents most commonly get wrong. Two-thesis stack:
- Clear is better than clever. Boring, explicit, maintainable Go (Jon Bodner, Learning Go, 2nd ed.).
- Production-grade by default. Bounded goroutine lifetimes, context threading, race-detector-clean tests, gofmt + golangci-lint on every change.
Reference Guide
Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Concurrency | references/concurrency.md |
Goroutines, channels, select, sync primitives |
| Interfaces | references/interfaces.md |
Interface design, io.Reader/Writer, composition |
| Generics | references/generics.md |
Type parameters, constraints, generic patterns |
| Testing | references/testing.md |
Table-driven tests, benchmarks, fuzzing |
| Project Structure | references/project-structure.md |
Module layout, internal packages, go.mod |
| Idiomatic Go (anti-patterns) | references/idiomatic-go.md |
Quick anti-pattern → idiomatic-fix tables, decision rules, agent-specific rationalization counters |
Core Workflow
- Analyze architecture — Review module structure, interfaces, and concurrency patterns
- Design interfaces — Small, focused, defined at the consumer; composition over inheritance
- Implement — Idiomatic Go with proper error handling and context propagation; run
go vet ./...before proceeding - Lint & validate — Run
golangci-lint runand fix all reported issues before proceeding - Optimize — Profile with pprof, write benchmarks, eliminate allocations
- Test — Table-driven tests with
-race, fuzzing, 80%+ coverage; race detector must pass before committing
Core Pattern Example
Goroutine with context cancellation and error propagation:
// worker runs until ctx is cancelled or an error occurs.
// Errors are returned via errCh; the caller must drain it.
func worker(ctx context.Context, jobs <-chan Job, errCh chan<- error) {
for {
select {
case <-ctx.Done():
errCh <- fmt.Errorf("worker cancelled: %w", ctx.Err())
return
case job, ok := <-jobs:
if !ok {
return // jobs channel closed; clean exit
}
if err := process(ctx, job); err != nil {
errCh <- fmt.Errorf("process job %v: %w", job.ID, err)
return
}
}
}
}
func runPipeline(ctx context.Context, jobs []Job) error {
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
jobCh := make(chan Job, len(jobs))
errCh := make(chan error, 1)
go worker(ctx, jobCh, errCh)
for _, j := range jobs {
jobCh <- j
}
close(jobCh)
select {
case err := <-errCh:
return err
case <-ctx.Done():
return fmt.Errorf("pipeline timed out: %w", ctx.Err())
}
}
Key properties: bounded goroutine lifetime via ctx, error propagation with
%w, no goroutine leak on cancellation.
Constraints
MUST DO
- Run gofmt and golangci-lint on all code
- Add
context.Contextas first param on all blocking operations - Handle every error explicitly (no naked
_discards without justification) - Write table-driven tests with subtests
- Document all exported functions, types, and packages
- Use
X | Yunion constraints for generics (Go 1.18+) - Propagate errors with
fmt.Errorf("...: %w", err) - Run race detector on tests (
-raceflag)
MUST NOT DO
- Ignore errors (no
_ = thatMightFail()without a comment) - Use
panicfor normal error handling - Spawn goroutines without a clear lifecycle
- Skip context cancellation handling
- Reach for reflection without a measured performance reason
- Mix sync and async patterns carelessly
- Hardcode configuration (functional options or env vars)
Output Templates
When implementing Go features, provide:
- Interface definitions (contracts first)
- Implementation files with proper package structure
- Test file with table-driven tests
- Brief explanation of any concurrency patterns used
Pairing
golang-proagent — broader architectural / DevOps coverage; delegates pattern detail here. Load both when active Go development is in scope.
Provenance
Initial content adapted from
jeffallan/claude-skills (MIT,
skills/golang-pro) and the prior wardrobe idiomatic-go skill (Bodner-derived
anti-pattern tables, now at references/idiomatic-go.md). See LICENSES.md.
<!-- tomevault:4.0:skill_md:2026-05-23 -->Source: danmestas/wardrobe — distributed by TomeVault.
- 流狐分类
- 通用
- 作者声明 Agent
- 未找到明确声明;不据此推断已兼容或已测试
- 静态检查
- 88 / 100 · 启发式扫描,不代表运行安全
- 作者 / 版本 / 许可
- @tomevault-io · 未声明 license
- 流狐 Token 估算
- 低消耗
- 流狐接入估算
- 需简单配置
- 是否需要外部 API Key
- 未发现要求
- 检测到的系统要求
- 未声明
- 底层运行要求
- 未声明
- 检测到的文件与系统行为
-
- 只读
- 允许写入 / 修改
- Shell 执行
- 读取环境变量
- 检测到的网络行为
- 仅限本地
- 安装命令数
- 无(仅作为资料)
档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。
# Core Pattern Example
// worker runs until ctx is cancelled or an error occurs.
// Errors are returned via errCh; the caller must drain it.
func worker(ctx context.Context, jobs <-chan Job, errCh chan<- error) {
for {
select {
case <-ctx.Done():
errCh <- fmt.Errorf("worker cancelled: %w", ctx.Err())
return
case job, ok := <-jobs:
if !ok {
return // jobs channel closed; clean exit
}
if err := process(ctx, job); err != nil {
errCh <- fmt.Errorf("process job %v: %w", job.ID, err)
return
}
}
}
}
func runPipeline(ctx context.Context, jobs []Job) error {
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
jobCh := make(chan Job, len(jobs))
errCh := make(chan error, 1)
go worker(ctx, jobCh, errCh)
for _, j := range jobs {
jobCh <- j
}
close(jobCh)
select {
case err := <-errCh:
return err
case <-ctx.Done():
return fmt.Errorf("pipeline timed out: %w", ctx.Err())
}
} Load detailed guidance based on context: Topic · Reference · Load When Concurrency · references/concurrency.md · Goroutines, channels, select, sync primitives
Analyze architecture — Review module structure, interfaces, and concurrency patterns Design interfaces — Small, focused, defined at the consumer; composition over inheritance Implement — Idiomatic Go with proper error handling and context propagation; run go…
Goroutine with context cancellation and error propagation: Key properties: bounded goroutine lifetime via ctx, error propagation with %w, no goroutine leak on cancellation.
Constraints
Run gofmt and golangci-lint on all code Add context.Context as first param on all blocking operations Handle every error explicitly (no naked discards without justification)
Ignore errors (no = thatMightFail() without a comment) Use panic for normal error handling Spawn goroutines without a clear lifecycle
# Golang Patterns
Idiomatic Go reference pack — concurrency, interfaces, generics, testing,
project structure, plus the anti-patterns agents most commonly get wrong.
Two-thesis stack:
- **Clear is better than clever.** Boring, explicit, maintainable Go (Jon Bodner,
*Learning Go*, 2nd ed.).
- **Production-grade by default.** Bounded goroutine lifetimes, context
threading, race-detector-clean tests, gofmt + golangci-lint on every change.
## Reference Guide
Load detailed guidance based on context:
| Topic | Reference | Load When |
|-------|-----------|-----------|
| Concurrency | `references/concurrency.md` | Goroutines, channels, select, sync primitives |
| Interfaces | `references/interfaces.md` | Interface design, io.Reader/Writer, composition |
| Generics | `references/generics.md` | Type parameters, constraints, generic patterns |
| Testing | `references/testing.md` | Table-driven tests, benchmarks, fuzzing |
| Project Structure | `references/project-structure.md` | Module layout, internal packages, go.mod |
| Idiomatic Go (anti-patterns) | `references/idiomatic-go.md` | Quick anti-pattern → idiomatic-fix tables, decision rules, agent-specific rationalization counters |
## Core Workflow
1. **Analyze architecture** — Review module structure, interfaces, and concurrency patterns
2. **Design interfaces** — Small, focused, defined at the consumer; composition over inheritance
3. **Implement** — Idiomatic Go with proper error handling and context propagation; run `go vet ./...` before proceeding
4. **Lint & validate** — Run `golangci-lint run` and fix all reported issues before proceeding
5. **Optimize** — Profile with pprof, write benchmarks, eliminate allocations
… 作者原文负责流程事实;流狐只索引当前章节、要点、文件与命令。
章节 -> Reference Guide → Core Workflow → Core Pattern Example → Constraints → MUST DO → MUST NOT DO
要点 -> Clear is better than clever. · Production-grade by default. · Analyze architecture · Design interfaces · Implement · Lint & validate · Optimize · Test
文件/命令 -> references/concurrency.md · references/interfaces.md · references/generics.md · references/testing.md · references/project-structure.md · references/idiomatic-go.md · go vet ./... · golangci-lint run
内容 SHA-256 -> c1fc7daca612
方法与流程
适用与边界
原文中的明确线索
references/concurrency.md、references/interfaces.md、references/generics.md、references/testing.md、references/project-structure.md、references/idiomatic-go.md、go vet ./...、golangci-lint run