golang如何使用sync.WaitGroup_golang sync.WaitGroup并发等待使用方法
WaitGroup 必须先 wg.Add(n) 再启动 goroutineDone() 需与 Add 匹配且仅调用一次Wait() 后不可复用或重置超时需配合 goroutine 和 select 实现。WaitGroup 必须在启动 goroutine 前 Add很多人一上来就 go func() { wg.Done() }()再调 wg.Add(1)结果 Wait() 立刻返回——因为 Add 晚于 Done计数器可能已归零或负数WaitGroup 行为未定义常见 panicsync: negative WaitGroup counter。正确顺序只有一种先 wg.Add(n)再启 goroutine。哪怕 n1 也别省这步。wg.Add() 必须在所有 go 语句之前或至少在对应 goroutine 执行 Done() 之前不能用 wg.Add() 在 goroutine 内部动态增减除非你明确知道并发安全边界但不推荐如果启动前不知道数量先用 len(tasks) 或 cap(ch) 预估Add 一次到位Done 调用必须和 Add 匹配且只能调一次Done() 是 Add(-1) 的语法糖本质是原子减。调两次、漏调、或在 Wait() 后调都会出问题。典型错误场景goroutine 中 panic 了Done() 没执行或者用了 defer wg.Done() 却忘了 return 前的逻辑可能提前退出。立即学习“go语言免费学习笔记深入” 文心快码 文心快码Comate是百度推出的一款AI辅助编程工具