Skip to main content

go-concurrency

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

Informações da origem

Repositório
skeletorflet/opencode-kit
Última atividade na origem
31 de março de 2026 às 18:16
Idioma detectado do SKILL.md
inglês
Estrelas
10
Forks
1

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
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 ./... ```
Ver no GitHub