Agent Skills: 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)

UncategorizedID: hoangnguyen0403/agent-skills-standard/golang-concurrency

Install this agent skill to your local

pnpm dlx add-skill https://github.com/HoangNguyen0403/agent-skills-standard/tree/HEAD/skills/golang/golang-concurrency

Skill Files

Browse the full folder contents for golang-concurrency.

Download Skill

Loading file tree…

skills/golang/golang-concurrency/SKILL.md

Skill Metadata

Name
golang-concurrency
Description
"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)"

Golang Concurrency

Priority: P0 (CRITICAL)

Principles

  • Share Memory by Communicating: Use channels instead of shared memory.
  • Context is King: Always pass ctx to manage cancellation/timeouts.
  • Prevent Leaks: Never start a goroutine without knowing how it will stop.
  • Race Detection: Always run tests with go test -race.

Implementation Workflow

  1. Choose primitive — Channels for data passing, sync.Mutex for simple state protection, errgroup for parallel tasks with error handling.
  2. Pass context — Every goroutine that does I/O or long work must accept context.Context.
  3. Define exit paths — Every goroutine must have a clear shutdown mechanism (context cancellation, channel close, or WaitGroup).
  4. Use select for multiplexing — Handle multiple channels or timeouts with select.
  5. Test with race detector — Run go test -race in CI.

See ErrGroup and concurrency patterns and context timeout examples

Anti-Patterns

  • ❌ Goroutine leaks — every goroutine needs a known exit path
  • ❌ Global state mutation across goroutines — use channels or sync primitives
  • ❌ Bare goroutines without lifecycle management — use errgroup or WaitGroup

References