Skip to main content

go-concurrency

Go concurrency patterns expert. Covers goroutines, channels, sync primitives, context, and concurrent design patterns.

Source facts

Repository
skeletorflet/opencode-kit
Last source activity
March 31, 2026 at 18:16
Detected SKILL.md language
English
Stars
9
Forks
1

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
go-concurrency
description
Go concurrency patterns expert. Covers goroutines, channels, sync primitives, context, and concurrent design patterns.
license
MIT
compatibility
opencode
metadata
{"audience":"developers","category":"backend"}
# Go Concurrency ## What I Do - Design goroutine patterns with proper lifecycle management - Implement channel-based communication patterns - Use sync primitives correctly (Mutex, RWMutex, WaitGroup, Once) - Handle context cancellation and timeouts - Prevent goroutine leaks and race conditions ## When to Use Me - Writing concurrent Go code - Debugging race conditions - Implementing worker pools - Designing producer-consumer patterns - Optimizing parallel processing ## Key Principles 1. **Share Memory by Communicating**: Prefer channels over shared state 2. **Context is King**: Always pass context for cancellation 3. **No Leaked Goroutines**: Every goroutine must have an exit path 4. **Race Detector**: Always test with `-race` flag 5. **ErrGroup**: Use for managing groups of goroutines ## Common Patterns ### Worker Pool ```go func workerPool(ctx context.Context, jobs <-chan Job, results chan<- Result, workers int) { var wg sync.WaitGroup for i := 0; i < workers; i++ { wg.Add(1) go func() { defer wg.Done() for job := range jobs { select { case <-ctx.Done(): return case results <- process(job): } } }() } wg.Wait() close(results) } ``` ### Fan-Out, Fan-In ```go func fanOut(ctx context.Context, input <-chan int, n int) []<-chan int { outputs := make([]<-chan int, n) for i := 0; i < n; i++ { outputs[i] = worker(ctx, input) } return outputs } ``` ## Validation ```bash go test -race ./... go vet ./... ```
View on GitHub