Golang / GoLang Basics Interview Questions
What is a goroutine leak and what is the idiomatic way to prevent one?
A goroutine leak occurs when a goroutine is started but never terminates — it stays blocked forever waiting on a channel, mutex, or network call that will never complete. Goroutines are cheap but not free: leaked goroutines accumulate over time and eventually exhaust memory in long-running services.
// LEAK â goroutine blocks forever; nobody ever sends to ch func leaky() { ch := make(chan int) go func() { v := <-ch // blocks indefinitely fmt.Println(v) }() // function returns â goroutine is stuck forever! } // FIX: pass a context and select on ctx.Done() func safe(ctx context.Context, ch <-chan int) { go func() { select { case v := <-ch: fmt.Println(v) case <-ctx.Done(): // goroutine exits cleanly when cancelled return } }() } // FIX: close the channel to unblock receivers func producer() <-chan int { ch := make(chan int) go func() { defer close(ch) // close signals: no more values for _, v := range data { ch <- v } }() return ch } // Detect leaks in tests: // defer goleak.VerifyNone(t) â fails test if goroutines remain // runtime.NumGoroutine() â watch for steady growth
More Related questions...