golang如何使用sync.WaitGroup_golang sync.WaitGroup并发等待使用方法

WaitGroup 必须先 wg.Add(n) 再启动 goroutine,Done() 需与 Add 匹配且仅调用一次,Wait() 后不可复用或重置,超时需配合 goroutine 和 select 实现。WaitGroup 必须在启动 goroutine 前 Add很多人一上来就 go func() { wg.Done() }(),再调 wg.Add(1),结果 Wait() 立刻返回------因为 Add 晚于 Done,计数器可能已归零或负数,WaitGroup 行为未定义(常见 panic:sync: negative WaitGroup counter)。正确顺序只有一种:先 wg.Add(n),再启 goroutine。哪怕 n=1 也别省这步。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辅助编程工具

相关推荐
比企谷八幡6 小时前
一张表在磁盘上长什么样:Heap File 入门
数据库·oracle
流星白龙6 小时前
【MySQL高阶】11.InnoDB存储引擎
数据库·mysql
Metaphor6927 小时前
使用 Python 在 Excel 中查找并高亮显示
python·信息可视化·excel
wangbing11257 小时前
SQL Server2008 R2版自动备份问题
数据库
Trouvaille ~7 小时前
【Redis篇】Redis 渐进式遍历与数据库管理
数据库·redis·缓存·中间件·数据库管理·后端开发·scan
旦莫7 小时前
AI测试Agent的两种架构路径:谁做主控?
人工智能·python·架构·自动化·ai测试
xcLeigh7 小时前
KES数据库运维监控与故障排查实战
运维·数据库·sql·故障排查·运维监控·kes
GlobalSign数字证书7 小时前
中小企业的 SSL/TLS 证书管理,有更轻量的方案
数据库·网络协议·ssl
周杰伦fans7 小时前
C# 异常继承深度解析:从设计原则到 sealed 关键字的奥秘
java·jvm·c#
搬石头的马农7 小时前
从零配置Claude自动修Bug:6步打造全自动开发流程
java·人工智能·python·bug·ai编程