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辅助编程工具

相关推荐
净水深流4 分钟前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链
l1t18 分钟前
测试DuckDB 2.1的match_recognize模式匹配语句
数据库·duckdb
智搜广告1 小时前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo
IpdataCloud1 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
曹牧2 小时前
Java:SQL 注入漏洞
数据库
2601_966949652 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng2 小时前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
Ivanqhz2 小时前
BM1688 双核架构
python·深度学习·神经网络·cnn·mlir
程序员JerrySUN2 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
Java后端的Ai之路2 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝