Golang 什么是WaitGroups
在Golang中可能会有这样的情况:不同的 goroutine 的执行可能会导致意外的行为。在这种情况下,我们要确保某些 goroutines 以预定的方式工作,并且程序要等待所有从主函数启动的 goroutines 等待。为了做到这一点,我们使用了 WaitGroups。
WaitGroups 允许我们解决上面提到的问题,因为它们会阻止代码,直到 WaitGroup 内的任何 goroutines 被成功执行。
一个 WaitGroup 有三个导出的方法,我们可以使用。这些方法是 –
- Add(int) – 增加计数器。
-
Wait() – 阻止执行,直到内部计数器变为0。
-
Done() – 将计数器减少1。
例子1
让我们考虑一个例子,我们将使用一个没有任何 WaitGroups 的 gouroutine 。
输出
如果我们使用命令 go run main.go 来运行上述代码,那么我们将得到以下输出-
请注意,我们无法得到在 goroutine 中调用的函数的输出 。 这是因为 主 函数在执行该 goroutine 之前就被终止了 。
为了解决这个问题,我们使用了 WaitGroups ,它被用来阻止程序,直到 WaitGroup 中的任何 goroutine 成功执行。
例2
现在,让我们在 WaitGroups 的帮助下解决上述例子 。 请看下面的代码。
输出
如果我们运行上述代码,它将产生以下输出 —
例3:匿名函数中的WaitGroups
如果我们有一个匿名函数在一个独立的 goroutine 上运行,我们也可以实现与上面一样的效果 。
请看下面的代码。
输出
如果我们使用命令 go run main.go 来运行上述代码,那么我们将得到以下输出-