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

相关推荐
OceanBase数据库官方博客12 分钟前
让 DRP全域数据智能流转OceanBase AI 数据库支撑央国企落地穿透式监
数据库·人工智能·oceanbase
跨境小彭17 分钟前
Python列表去重的6种高效方法(含保留顺序+性能对比)
开发语言·python
笃行35021 分钟前
零代码完成MongoDB迁移,KingbaseES是怎么做到的
数据库
Leighteen22 分钟前
时区的坑:为什么存进数据库的时间,差了 8 小时
数据库
今天AI了吗23 分钟前
Python 基础语法从入门到使用详解
开发语言·人工智能·python
陈天伟教授25 分钟前
TraeWork初体验-生成研究报告
大数据·数据库·人工智能
大黄说说30 分钟前
SQL Server 执行计划怎么看?快速定位 SQL 慢的根源
java·linux·数据库
苏灿烤鱼30 分钟前
从微信公众号内容到视频号视频:自动化视频生成的技术实现
人工智能·python·ffmpeg
专注API从业者1 小时前
告别人工盯品!Open Claw 搭建京东商品全自动监控与数据分析系统(附完整可运行代码)
大数据·数据库·数据分析
金銀銅鐵1 小时前
[Python] 借助 Pillow 和 NumPy 生成与斐波那契数列有关的图案
python·数学