go chan 限制协程数量
利用 channel 的缓存区
可以利用信道 channel 的缓冲区大小来实现:
// main_chan.go func main() { var wg sync.WaitGroup ch := make(chan struct{}, 3) for i := 0; i < 10; i++ { ch <- struct{}{} wg.Add(1) go func(i int) { defer wg.Done() log.Println(i) time.Sleep(time.Second) <-ch }(i) } wg.Wait() }
参考:https://geektutu.com/post/hpg-concurrency-control.html