🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Go提供了更简单的方法——使用`sync.WaitGroup`。`WaitGroup`,就是用来等待一组操作完成的。`WaitGroup`内部实现了一个计数器,用来记录未完成的操作个数. 它提供了三个方法,`Add()`用来添加计数。`Done()`用来在操作结束时调用,使计数减一。`Wait()`用来等待所有的操作结束,即计数变为0,该函数会在计数不为0时等待,在计数为0时立即返回。 应用示例: ~~~go package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup wg.Add(2) // 因为有两个动作,所以增加2个计数 go func() { fmt.Println("Goroutine 1") wg.Done() // 操作完成,减少一个计数 }() go func() { fmt.Println("Goroutine 2") wg.Done() // 操作完成,减少一个计数 }() wg.Wait() // 等待,直到计数为0 } ~~~ 运行输出: ~~~go Goroutine 2 Goroutine 1 ~~~