在 sync.WaitGroup(等待组)类型中,每个 sync.WaitGroup 值在内部维护着一个计数,此计数的初始默认值为零

方法

方法名功能
(wg * WaitGroup) Add(delta int)等待组的计数器 +delta
(wg * WaitGroup) Done()等待组的计数器 -1
(wg * WaitGroup) Wait()当等待组计数器不等于 0 时阻塞直到变 0

使用示例

创建wg计数器:

var wg sync.WaitGroup

计数器加1:

wg.Add(1)

计数器减1:

wg.Done()

计数器等待:

wg.Wait()

完整示例

package main
 
import (
	"fmt"
	"sync"
)
 
func main() {
	//  创建计数器
	var wg sync.WaitGroup
	//  并发任务
	for i := 0; i < 10; i++ {
		//  计数器+1
		wg.Add(1)
		go func(i int) {
			//  goroutine结束后计数器-1
			defer wg.Done()
			fmt.Println(i)
		}(i)
	}
	//  计数器等待
	wg.Wait()
	fmt.Println("END")
}

当wg计数大于0时,wg.Wait()会使程序阻塞,直到计数为0时,才继续执行后面的代码。