如何在Golang应用中使用WaitGroup。
高并发,高性能应用,理解WaitGroup是至关重要的。
WaitGroup是什么,什么时候应该使用它。
当你开始用Go写应用时,需要阻塞你代码特定部分的执行的场景,直到这些goroutines成功的执行。
time.Sleep(1 * time.Second)
这有效的模拟了我们花费一些时间做一些工作。
在goroutine有机会执行之前主函数已经中止,或者是完成执行。
这里就是WaitGroup来救援的地方。
WaitGroup可以有效的作为一个计数器,有三个不同的任务。
我们可以把这个计数器设置为3。
现在无论何时一个任务被执行,计数器减1。
仅仅当WaitGroup中的计数器到了0时,程序将继续执行。
新建一个sync.WaitGroup变量。
- package main
-
- import (
- "fmt"
- "sync"
- )
-
- func myFunc(waitgroup *sync.WaitGroup) {
- fmt.Println("Inside my goroutine")
- waitgroup.Done()
- }
-
- func main() {
- fmt.Println("Hello World")
-
- var waitgroup sync.WaitGroup
- waitgroup.Add(1)
- go myFunc(&waitgroup)
- waitgroup.Wait()
-
- fmt.Println("Finished Execution")
- }
主函数不继续通过这个点,直到内部的计数器为0。
解决了在goroutine完成自己的执行之前主函数执行问题。