package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
results := make([]int, 3)
// 模拟3个网络请求
for i := 0; i < 3; i++ {
wg.Add(1)
go func(index int) {
defer wg.Done()
// 模拟网络请求
result := index * 2
results[index] = result
}(i)
}
wg.Wait()
fmt.Println("汇总结果:", results)
}
Add
方法:用于向WaitGroup
添加指定数量的任务,即告诉WaitGroup
有多少个协程需要等待。在上述代码中,wg.Add(1)
表示每个新的协程开始时,增加一个等待的任务。
Done
方法:当一个协程完成任务后,调用Done
方法,它等同于Add(-1)
,即减少WaitGroup
中等待的任务数量。在上述代码中,defer wg.Done()
确保在协程结束时,无论是否发生错误,都会减少等待的任务数。
Wait
方法:调用Wait
方法的协程会阻塞,直到WaitGroup
中等待的任务数量降为0,即所有相关协程都调用了Done
方法。在上述代码中,wg.Wait()
使主协程等待所有模拟网络请求的协程完成任务后,再继续执行后续代码。