管道与WaitGroup对比
package main
import (
"fmt"
"sync"
)
func main() {
c := make(chan bool, 100)
for i := 0; i < 100; i++ {
go func(i int) {
fmt.Println(i)
c <- true
}(i)
}
for i := 0; i < 100; i++ {
<-c
}
wg := sync.WaitGroup{}
// sync.WaitGroup 只有3个方法,Add(),Done(),Wait()
// 其中 Done() 是 Add(-1) 的别名
// Add() 添加计数,Done() 减掉一个计数,计数不为0, 阻塞Wait()的运行
wg.Add(100)
for i := 0; i < 100; i++ {
go func(i int) {
fmt.Println(i)
wg.Done()
}(i)
}
wg.Wait()
}