WaitGroup 用于等待一组 goroutine 结束,有时候写golang测试程序的时候,在main函数创建一个协程,协程没跑完main就执行完了,或者在main最后价格睡眠,但使用WaitGroup比较正宗。
package main
import (
"fmt"
"sync"
)
func main(){
var wg sync.WaitGroup
for i:=1;i<=3;i++ {
// 计数加 1
wg.Add(1)
go func(i int) {
// 计数减 1
defer wg.Done()
fmt.Printf("goroutine%d 结束\n", i)
}(i)
}
// 等待执行结束
wg.Wait()
fmt.Println("所有 goroutine 执行结束")
}
运行:goroutine3结束
goroutine1结束
goroutine2结束
所有goroutine执行结束