Go WaitGroup的使用方式及实例详解
WaitGroup 是 Go 语言的一个并发控制机制,它可以用于等待一组 goroutine 的结束。WaitGroup 提供了三个方法:Add、Done 和 Wait。
下面是一个使用 WaitGroup 的示例代码:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Printf("goroutine %d
", i)
}(i)
}
wg.Wait()
fmt.Println("All goroutines finished")
}
在上面的例子中,首先创建了一个 WaitGroup 对象 wg。然后使用一个 for 循环启动了 5 个 goroutine,并在每一个 goroutine 中调用了 wg.Add(1) 来增加 WaitGroup 中等待的 goroutine 的数量。在每一个 goroutine 的最后调用了 wg.Done() 来通知 WaitGroup 一个 goroutine 的结束。最后在主 goroutine 中调用了 wg.Wait() 来等待所有的子 goroutine 结束。
上面的代码运行时,可能会输出类似以下的结果:
goroutine 4
goroutine 0
goroutine 3
goroutine 2
goroutine 1
All goroutines finished
可以看到,区分的 goroutine 的输出顺序是随机的,这是由于它们是并发履行的。
总结:WaitGroup 是 Go 语言中一个用于等待一组 goroutine 结束的机制。通过调用 Add、Done 和 Wait 方法,可以实现对一组 goroutine 的并发控制。
TOP