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辅助编程工具
相关推荐
ApacheSeaTunnel3 分钟前
一套替代四套!同程旅行用 Apache SeaTunnel 搭建多模态统一数据通道段一凡-华北理工大学6 分钟前
向量数据库实战:选型、调优与落地~系列文章02:Embedding 嵌入模型选型指南:OpenAI、BGE、Jina、Cohere 横评️学习的小王10 分钟前
MySQL 数据库基础操作全解:从建库到增删改查statistican_ABin12 分钟前
2026 FIFA 世界杯比赛与球队数据探索性分析qetfw13 分钟前
yt-dlp:下载公开视频、字幕、封面和音频的实用命令QH_ShareHub16 分钟前
GPU 完整运行过程:驱动、CUDA Toolkit、Conda、Python PyTorch 与 R torchAbsoluteLogic20 分钟前
Python——必学内置模块 SysSpider Cat 蜘蛛猫21 分钟前
OIDC 联邦 SSO(复旦 OP / 清华 RP)完整全链路(纯标准OIDC、无User Storage SPI、含用户浏览器操作)开源量化GO28 分钟前
最新AI量化学习路径,从交易想法走到条件和动作oradh31 分钟前
Oracle 11g单库升级至19c单库(dbua图形方式)