如何实现只开100个协程

题目来源:

答案:sunrise

  1. // 利用 channel 的缓存区实现
  2. func main() {
  3. var wg sync.WaitGroup
  4. ch := make(chan struct{}, 3)
  5. for i := 0; i < 10; i++ {
  6. ch <- struct{}{}
  7. wg.Add(1)
  8. go func(i int) {
  9. defer wg.Done()
  10. log.Println(i)
  11. time.Sleep(time.Second)
  12. <-ch
  13. }(i)
  14. }
  15. wg.Wait()
  16. }