1.5.6 根据控制 Channel 的缓存大小来控制并发执行的 Goroutine 的最大数量。发生死锁
作者: mazezen创建于 2026年4月20日更新于 2026年4月20日
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{}
}
内容来源: chai2010/advanced-go-programming-book