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

}

}