1.5.6 根据控制 Channel 的缓存大小来控制并发执行的 Goroutine 的最大数目.发生死锁
Author: mazezenCreated Apr 20, 2026Updated Apr 20, 2026
var limit = make(chan int, 3)
var work = []func(){
func() { println("1"); time.Sleep(1 * time.Second) },
func() { println("2"); time.Sleep(1 * time.Second) },
func() { println("3"); time.Sleep(1 * time.Second) },
func() { println("4"); time.Sleep(1 * time.Second) },
func() { println("5"); time.Sleep(1 * time.Second) },
}
func main() {
for _, w := range work {
go func(w func()) {
limit <- 1
w()
<-limit
}(w)
}
select{}
}
5
3
4
1
2
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [select (no cases)]:Source: chai2010/advanced-go-programming-book