package main import ( "fmt" "sync" "time" ) /*等待组API介绍*/ func main071() { var wg sync.WaitGroup fmt.Println(wg) //向等待组添加一个协程(注册) wg.Add(1) //从等待组减掉一个协程(注销) wg.Done() //阻塞等待至等待组中的协程数归零 wg.Wait() } /* ·分别使用Ticker和Timer创建耗时协程A,B ·将A,B,C两个协程加入等待组 ·A,B,C结束时从等待组注销 ·主协程阻塞至等待组内协程数归零 */ func main() { //声明等待组 var wg sync.WaitGroup //每开辟一个协程就向等待组中+1 wg.Add(1) go func() { fmt.Println("协程A开始工作") time.Sleep(3 * time.Second) fmt.Println("协程A over") //协程结束,从等待组中注销(协程数-1) wg.Done() }() //每开辟一个协程就向等待组中+1 wg.Add(1) go func() { fmt.Println("协程B开始工作") //timer := time.NewTimer(3 * time.Second) //<- timer.C <-time.After(5 * time.Second) fmt.Println("协程B over") //协程结束,从等待组中注销(协程数-1) wg.Done() }() //每开辟一个协程就向等待组中+1 wg.Add(1) go func() { fmt.Println("协程C开始工作") ticker := time.NewTicker(time.Second) for i := 0; i < 4; i++ { <-ticker.C } ticker.Stop() fmt.Println("协程C over") //协程结束,从等待组中注销(协程数-1) wg.Done() }() //阻塞等待wg中的协程数归零 wg.Wait() fmt.Println("main over") }