100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace

Go Concurrency Patterns Cheat Sheet

Go Concurrency Patterns Cheat Sheet

Covers goroutines, channels, select statements, sync primitives, and common concurrency patterns like worker pools and fan-in/fan-out in Go.

2 PagesIntermediateMar 30, 2026

Goroutines & Channels

Starting goroutines and communicating over channels.

go
func main() {	ch := make(chan string)	go func() {		ch <- "hello from goroutine"	}()	msg := <-ch	fmt.Println(msg)	// Buffered channel	buf := make(chan int, 3)	buf <- 1	buf <- 2	close(buf)	for v := range buf {		fmt.Println(v) // ranges until channel is closed	}}

Select Statement

Waiting on multiple channel operations at once.

go
select {case msg1 := <-ch1:	fmt.Println("received", msg1)case msg2 := <-ch2:	fmt.Println("received", msg2)case <-time.After(1 * time.Second):	fmt.Println("timeout")default:	fmt.Println("no message ready") // non-blocking select}

sync Package

Core synchronization primitives from the standard library.

  • sync.Mutex- Locks a critical section; call Lock() and Unlock() (typically via defer)
  • sync.RWMutex- Allows multiple concurrent readers or one writer; RLock()/RUnlock() for reads
  • sync.WaitGroup- Waits for a collection of goroutines to finish via Add/Done/Wait
  • sync.Once- Ensures a function runs exactly once, e.g. for lazy initialization
  • sync.Map- Concurrency-safe map optimized for specific high-contention access patterns
  • atomic package- Lock-free atomic operations (AddInt64, LoadInt32, etc.) from sync/atomic
  • context.Context- Carries cancellation signals and deadlines across API boundaries and goroutines

Worker Pool Pattern

Fixed pool of goroutines processing jobs from a shared channel.

go
func main() {	jobs := make(chan int, 100)	results := make(chan int, 100)	var wg sync.WaitGroup	for w := 1; w <= 3; w++ {		wg.Add(1)		go func(id int) {			defer wg.Done()			for j := range jobs {				results <- j * j			}		}(w)	}	for j := 1; j <= 9; j++ {		jobs <- j	}	close(jobs)	wg.Wait()	close(results)	for r := range results {		fmt.Println(r)	}}

Common Patterns

Named concurrency patterns you'll see across Go codebases.

  • Fan-out- Multiple goroutines read from the same channel to parallelize work
  • Fan-in- Merge multiple channels into one using a dedicated merge goroutine
  • Pipeline- Chain stages so each stage's output channel feeds the next stage's input
  • Done channel- A closed channel broadcasts cancellation to every listening goroutine
  • context.WithCancel- Standard way to propagate cancellation through a call graph
  • context.WithTimeout- Cancels automatically after a duration; use with select on ctx.Done()
Pro Tip

Always know who closes a channel and only close it from the sender side — closing a channel you're only receiving from, or closing it twice, causes a panic.

Was this cheat sheet helpful?

Explore Topics

#GoConcurrencyPatterns#GoConcurrencyPatternsCheatSheet#Programming#Intermediate#GoroutinesChannels#SelectStatement#SyncPackage#WorkerPoolPattern#Concurrency#CheatSheet#SkillVeris
Advertisement
Sri Hayavadhana Info-Tech

Professional Web Designing Services

  • Responsive Websites
  • E-commerce Solutions
  • SEO Friendly Design
  • Fast & Secure
  • Support & Maintenance
Get a Free Quote

Share this Cheat Sheet