waitgroup
waitgroup是在sync包中要求主线程等待其他协程完成他们的任务
什么是协程
很有趣,协程是另一种执行,相当于java的线程(一个线程可以有多个协程)
main实际上也是协程的一种,所以一个golang语言应该至少有一个协程
package main
import "fmt"
func task(msg string) {
for i := 0; i < 10; i++ {
fmt.Println(msg)
}
}
func main() {
go task("hello")
go task("world")
}
运行之后可以看到,根本没有实现,直接就退出了
因为main没有等待两个go的结束,就直接退出了
(main是个特殊的go程,当main结束的时候,所有对应的协程都会结束,和一般并行的go程不一样嗷~)
用法
- sync.add(1) 表明除主main之后的协程,协程数目+1
- syn.done() 表示除主main之后的协程,协程数目-1
- syn.wait()表明等待所有协程结束退出
所以上面的程序就可以改造为: