Agent-skills-standard golang-concurrency
Write safe concurrent Go code with goroutines, channels, and context. Use when implementing concurrency with goroutines, channels, or context in Go. (triggers: goroutine, go keyword, channel, mutex, waitgroup, context, errgroup, race condition)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/golang/golang-concurrency" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-golang-concurrency && rm -rf "$T"
manifest:
skills/golang/golang-concurrency/SKILL.mdsource content
Golang Concurrency
Priority: P0 (CRITICAL)
Principles
- Share Memory by Communicating: Use channels instead of shared memory.
- Context King: Always pass
to manage cancellation/timeouts.ctx - Prevent Leaks: Never start goroutine without knowing how it will stop.
- Race Detection: Always run tests with
.go test -race
Implementation Workflow
- Choose primitive — Channels for data passing,
for simple state protection,sync.Mutex
for parallel tasks with error handling.errgroup - Pass context — Every goroutine that I/O or long work must accept
.context.Context - Define exit paths — Every goroutine must clear shutdown mechanism (context cancellation, channel close, or WaitGroup).
- Use select for multiplexing — Handle multiple channels or timeouts with
.select - Test with race detector — Run
in CI.go test -race
See ErrGroup and concurrency patterns and context timeout examples
Anti-Patterns
- No goroutine leaks: ensure every goroutine known exit path.
- No shared global state: use channels or sync primitives across goroutines.
- No bare goroutines: use
orerrgroup
for lifecycle management.WaitGroup