Three patterns I use constantly in Go:

1. Fan-out / Fan-in Distribute work across goroutines, collect results via a single channel.

2. Pipeline Each stage reads from an input channel, transforms, writes to an output channel. Cancelable via context.

3. Worker pool Fixed-size pool of goroutines pulling from a shared job queue. Prevents goroutine explosion on bursty workloads.

The rule: channels for coordination, mutexes for state. Never fight the runtime.