# Concurrency

> Standards for safe concurrent programming using Goroutines, Channels, and Context.

- Skill: `majiayu000/concurrency-4` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/concurrency-4`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/concurrency-4/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/concurrency-4

---


# Golang Concurrency Standards

## **Priority: P0 (CRITICAL)**

## Principles

- **Share Memory by Communicating**: Don't communicate by sharing memory. Use channels.
- **Context is King**: Always pass `ctx` to 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 `select` to handle multiple channels or timeouts.

## References

- [Concurrency Patterns](references/concurrency-patterns.md)
- [Context Usage](references/context-usage.md)

