func channel() {
count := 10 // 最大支持并发
sum := 100 // 任务总数
c := make(chan struct{}, count) // 控制任务并发的chan
sc := make(chan struct{}, sum) // 控制任务总数的chan
defer close(c)
defer close(sc)
for i:=0; i
c <- struct{}{} // 作用类似于waitgroup.Add(1)
go func(j int) {
fmt.Println(j)
<- c // 执行完毕,释放资源
sc <- struct {}{} // 记录到执行总数里
}(i)
}
for i:=sum; i>0;i-- {
<- sc
}
}