在Go语言中,goroutine是非常常见和重要的概念。它们允许我们将任务并行化,从而提高程序的性能。有时我们需要等待一组goroutine完成后再执行下一步操作,这时候就可以使用sync.WaitGroup。
sync.WaitGroup是Go语言标准库中的一个同步原语,它可以让主线程等待一组goroutine的执行完毕。具体来说,我们可以通过如下三个方法来使用sync.WaitGroup:
- Add(delta int):向WaitGroup中添加或减少计数器的值。delta可以为正数或负数,正数表示添加计数器的值,负数表示减少计数器的值。
- Done():减少WaitGroup中计数器的值,相当于Add(-1)。
- Wait():阻塞调用它的goroutine,直到WaitGroup中计数器的值变为0。
我们可以通过以下示例来理解sync.WaitGroup的用法:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Worker %d starting\n", id)
// 模拟耗时操作
for i := 0; i < 1000000000; i++ {
_ = i
}
fmt.Printf("Worker %d done\n", id)
}
func main() {
var wg sync.WaitGroup
// 启动5个goroutine
for i := 1; i <= 5; i++ {