Golang Concurrency Standards
Priority: P0 (CRITICAL)
Principles
- •Share Memory by Communicating: Don't communicate by sharing memory. Use channels.
- •Context is King: Always pass
ctxto efficient manage cancellation/timeouts. - •Prevent Leaks: Never start a goroutine without knowing how it will stop.
- •Race Detection: Always run tests with
go test -race.
Primitives
- •Goroutines: Lightweight threads.
go func() { ... }() - •Channels: For data passing + synchronization.
- •WaitGroup: Wait for a group of goroutines to finish.
- •ErrGroup: WaitGroup + Error propagation (Preferred).
- •Mutex: Protect shared state (simpler than channels for just state).
Guidelines
- •Buffered vs Unbuffered: Use unbuffered channels for strict synchronization. Use buffered only if you specifically need async decoupling/burst handling.
- •Closed Channels: Panic if writing to closed. Reading from closed returns zero-value immediately.
- •Select: Use
selectto handle multiple channels or timeouts.