使用range方法来遍历我们上面写的dirEntries的返回文件或文件夹,如果是文件夹则继续迭代。如果不是则将文件大小存入放入fileSizes channel中。只有当close这句执行到,显示关闭掉channel之后,才会跳出range循环并且这时已经读取完了所有的数据。明白了这个道理之后,这个就不难理解了,当我们还在遍历文件的时候,select 会持续读取文件大小赋值给size,并且返回true给ok。可以注意到我们并没有在walkdir里面开启goroutines进行并发处理。sync.WaitGroup提供了三个方法:  Add:添加或减少goroutine的数量。感觉快得飞起,然而跑不了几秒就会报错,这个程序最大的问题就是我们完全没有办法之后它会自己打开多少个goroutine,感觉会爆炸。所以我们要限制这种夸张的写法,使用channel来做一个并发协程池,把同时开启的goroutine的数量控制一下。

golang gin 框架 异步同步 goroutine 并发操作

golang gin 框架 异步同步 goroutine 并发操作

golang gin 框架 异步同步 goroutine 并发操作

golang gin 框架 异步同步 goroutine 并发操作

golang gin 框架 异步同步 goroutine 并发操作

golang gin 框架 异步同步 goroutine 并发操作

golang gin 框架 异步同步 goroutine 并发操作

golang gin 框架 异步同步 goroutine 并发操作

golang gin 框架 异步同步 goroutine 并发操作