go-concurrency-patterns
Master Go concurrency with goroutines, channels, sync primitives, and context. Use when building concurrent Go applications, implementing worker pools, or debugging race conditions.
- License 许可
- MIT
- 最近更新
- 2026-11-11
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- go-concurrency-patterns
- description
- Master Go concurrency with goroutines, channels, sync primitives, and context. Use when building concurrent Go applications, implementing worker pools, or debugging race conditions.
02 资源文件 1
- 参考文档references/patterns.md9.8 KB
03 SKILL.md 正文
Go Concurrency Patterns
Production patterns for Go concurrency including goroutines, channels, synchronization primitives, and context management.
When to Use This Skill
- Building concurrent Go applications
- Implementing worker pools and pipelines
- Managing goroutine lifecycles
- Using channels for communication
- Debugging race conditions
- Implementing graceful shutdown
Core Concepts
Primitives
| Primitive | Purpose |
|---|---|
goroutine |
Lightweight concurrent execution |
channel |
Communication between goroutines |
select |
Multiplex channel operations |
sync.Mutex |
Mutual exclusion |
sync.WaitGroup |
Wait for goroutines to complete |
context.Context |
Cancellation and deadlines |
Go Concurrency Mantra
Don't communicate by sharing memory;
share memory by communicating.
Quick Start
package main
import (
"context"
"fmt"
"sync"
"time"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
results := make(chan string, 10)
var wg sync.WaitGroup
for i := 0; i < 3; i++ {
wg.Add(1)
go worker(ctx, i, results, &wg)
}
go func() {
wg.Wait()
close(results)
}()
for result := range results {
fmt.Println(result)
}
}
func worker(ctx context.Context, id int, results chan<- string, wg *sync.WaitGroup) {
defer wg.Done()
select {
case <-ctx.Done():
return
case results <- fmt.Sprintf("Worker %d done", id):
}
}
Patterns
Load references/patterns.md for full implementations of these patterns:
- Worker Pool — Fixed number of goroutines consuming from a shared job channel
- Fan-In — Pipeline stages with multiple workers merging into one output channel
- Bounded Concurrency — Semaphore-based rate limiting with
golang.org/x/sync/semaphore - Graceful Shutdown — Signal handling, context cancellation, WaitGroup drain with timeout
- Error Group —
golang.org/x/sync/errgroupfor concurrent ops with first-error cancellation - Concurrent Map —
sync.Mapfor read-heavy, sharded map for write-heavy workloads - Select Patterns — Timeout, non-blocking send/receive, priority select
Race Detection
# Run tests with race detector
go test -race ./...
# Build with race detector
go build -race .
# Run with race detector
go run -race main.go
Best Practices
Do's
- Use context — For cancellation and deadlines
- Close channels — From sender side only
- Use errgroup — For concurrent operations with errors
- Buffer channels — When you know the count
- Prefer channels — Over mutexes when possible
Don'ts
- Don't leak goroutines — Always have exit path
- Don't close from receiver — Causes panic
- Don't use shared memory — Unless necessary
- Don't ignore context cancellation — Check ctx.Done()
- Don't use time.Sleep for sync — Use proper primitives
Resources
04 同仓库更多 Skills
skill-creator
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
writing-shape
Writing, exploit: shape raw material into an article, paragraph by paragraph.
webapp-testing
Test local web applications using Playwright. Use when verifying frontend functionality, debugging UI behavior, capturing browser screenshots, or viewing browser logs.
wait-what
Stop. That last message did not land: re-pitch it.
prototype
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.
improve-codebase-architecture
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.