package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go func(taskNum int) {
defer wg.Done()
fmt.Printf("任务编号: %d\n", taskNum)
}(i)
}
wg.Wait()
}
WaitGroup关键方法作用
wg.Add(delta int)
:此方法用于向WaitGroup计数器添加指定数量(delta
)的值。在上述代码中,每次启动一个新的goroutine前,使用wg.Add(1)
将计数器加1,代表新增了一个需要等待完成的任务。
wg.Done()
:该方法等价于wg.Add(-1)
,用于将WaitGroup计数器减1。在每个goroutine的函数体中使用defer wg.Done()
,意味着当该goroutine结束时,计数器会相应减少,表示该任务已完成。
wg.Wait()
:此方法会阻塞当前goroutine,直到WaitGroup的计数器归零。在主函数中,wg.Wait()
确保主goroutine等待所有10个并发任务完成后再退出,避免程序提前结束而部分任务未执行完。