Golang Concurrency

SkillAI & models

This skill gives your AI guidance and patterns for writing concurrent Go code. Once added, your AI can write Go programs that run several tasks at the same time using established approaches. It comes from a collection of Go skills in the samber/cc-skills-golang repository.

Available today. Use it from your connected AI after setup.

Add the skill, then ask your AI to write Go code that needs to handle several tasks at once. It will apply the patterns and guidance from the skill as it works.

Then ask your AI: use the Golang Concurrency skill

What your AI can do with it

  • Write Go code that runs multiple tasks at the same time
  • Apply established patterns for concurrent Go programs
  • Follow recommended guidance when structuring concurrent code
  • Use Go's concurrency features in the code it writes for you

What this skill tells your AI

The instructions your AI receives, as published by hoangnguyen0403/agent-skills-standard in skills/golang/golang-concurrency/SKILL.md and read by ahel’s review.

Priority: P0 (CRITICAL)

Principles

  • Share Memory by Communicating: Use channels or synchronization primitives instead of unprotected shared memory.
  • Context Propagation: Always pass ctx to manage cancellation, deadlines, and graceful termination.
  • Throttle Database Load: Reserve goroutines for independent external API calls or CPU work. Avoid unconstrained goroutines hitting databases to prevent connection pool exhaustion.
  • Prevent Leaks: Never start a goroutine without a deterministic shutdown mechanism.
  • Race Detection: Always verify concurrent code with go test -race.

Implementation Workflow

  1. Choose primitiveerrgroup.Group for parallel tasks with error propagation, channels for pipelines, sync.Mutex for simple shared state.
  2. Bound Concurrency with Semaphore — Cap maximum active goroutines using a buffered channel semaphore:
    sem := make(chan struct{}, maxWorkers)
    for _, task := range tasks {
        task := task // prevent loop pointer capture
        sem <- struct{}{}
        g.Go(func() error {
            defer func() { <-sem }()
            return task.Execute(ctx)
        })
    }
    
  3. Respect Context Cancellation — Goroutines performing I/O must honor ctx.Done().
  4. Avoid Loop Pointer Capture — Capture iteration variables explicitly before launching goroutines.
  5. Test with race detector — Run go test -race in local dev and CI.

See ErrGroup and concurrency patterns and context timeout examples

Anti-Patterns

  • No DB connection spam: avoid spawning unbounded goroutines to query the database in parallel.
  • No goroutine leaks: ensure every goroutine has an exit path via ctx.Done() or channel closure.
  • No loop variable pointer trap: never pass the address of a loop variable (&item) into a concurrent closure.
  • No unbuffered goroutine spawn storms: always cap concurrency with worker pools or semaphores.
  • No bare goroutines: use errgroup or sync.WaitGroup for lifecycle tracking.

References

Signals

GitHub stars
565
Forks
164
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
golang-concurrency
Source
github.com/hoangnguyen0403/agent-skills-standard