新闻中心
Golang如何使用WaitGroup等待goroutine完成
WaitGroup用于等待多个goroutine完成,通过Add增加计数、Done减少计数、Wait阻塞直至计数为零。

在Go语言中,WaitGroup 是 sync 包提供的一个同步原语,用于等待一组并发的 goroutine 执行完成。它特别适合在主协程需要等待多个子协程结束时使用,而不需要关闭通道或处理复杂的信号机制。
基本用法和核心方法
WaitGr
oup 有三个主要方法:
-
Add(delta int):增加计数器,通常传入要启动的 goroutine 数量。 -
Done():在每个 goroutine 结束时调用,相当于计数器减1。 -
Wait():阻塞当前协程,直到计数器归零。
典型结构是:主协程调用 Add(n) 设置任务数量,每个子协程执行完后调用 Done(),主协程通过 Wait() 阻塞等待全部完成。
简单示例:等待多个goroutine完成
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // 任务完成,计数器减1
fmt.Printf("Worker %d starting\n", id)
time.Sleep(time.Second) // 模拟工作
fmt.Printf("Worker %d done\n", id)
}
func main() {
var wg sync.WaitGroup
for i := 1; i <= 3; i++ {
wg.Add(1) // 增加计数
go worker(i, &wg) // 启动goroutine
}
wg.Wait() // 等待所有worker完成
fmt.Println("All workers finished")
}
输出会显示三个 worker 依次开始和结束,最后打印“All workers finished”。
NameGPT
免费的名称生成器,AI驱动在线生成企业名称及Logo
119
查看详情
注意事项和常见错误
使用 WaitGroup 时需注意以下几点:
-
避免Add负值:调用
Add(-n)会导致 panic,除非你明确知道计数器足够大。 -
确保Done被调用:每个
Add(1)必须对应一次Done(),否则程序会一直阻塞。 -
传递指针:应将
WaitGroup的指针传给 goroutine,避免值拷贝导致状态不一致。 -
Add应在Wait前调用:最好在
go语句前调用Add,防止竞争条件。
适用场景
WaitGroup 适用于以下情况:
- 批量启动多个 goroutine 并等待它们全部完成(如并行请求、数据抓取)。
- 无需从 goroutine 获取返回值,只关心执行完成。
- 作为轻量级同步工具,比通道更简洁。
基本上就这些。只要记住 Add、Done、Wait 的配合使用,就能安全地控制并发流程。
以上就是Golang如何使用WaitGroup等待goroutine完成的详细内容,更多请关注其它相关文章!
# 相关文章
# 全国网站建设模板套餐
# 企业短视频营销推广方式
# seo怎样建立网站排名
# 商务网站建设原创
# 上海指定关键词排名
# 微信微博营销推广
# 历城区专业网站推广
# 山西各大营销推广企业
# 新品seo标题优化技巧论文
# 番禺区网站整站优化
# 中文网
# go
# 而不
# 适用于
# 就能
# 结束时
# 自定义
# 如何使用
# 死锁
# 多个
# ai
# go语言
# golang
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
抖音网页版平台入口 抖音网页版官网在线访问教程
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
J*a TimerTask中HashMap意外清空的深层原因与解决方案
QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
邮政快递包裹最新位置 邮政快递实时追踪入口
苹果手机如何防止被恶意App追踪
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
百度网盘网页版入口 百度网盘网页版官方登录网址
msn官网入口地址手机版 msn官方网站手机最新链接
Python自定义类排序:解决lambda键值访问TypeError的实践指南
痛风发作了怎么办? 快速止痛和后期饮食调理
淘宝网网页版登录入口 淘宝官方网页版快捷登录
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
在Runstone环境中高效处理TasteDive API的JSON数据
响应式图片在网页设计中的正确实现方法
千牛数据看板网页版_千牛数据看板网页版访问方法
抖音创作助手登录入口_抖音创作辅助工具官网直达
菜鸟取件码是什么怎么查 最全查询渠道汇总
汽水音乐在线版入口_汽水音乐网页播放手册
提升Kafka消费者健壮性:会话超时处理与消息处理语义
Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略
Mac怎么锁定备忘录_Mac备忘录加密设置教程
必由学官方平台入口 必由学在线课堂登录地址
excel怎么制作工资条 excel快速生成工资条的方法
j*a toString()的覆盖
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
Bing引擎入口最新2025 Bing搜索免费官方登录
内存检查:在VS Code中调试C++时的内存视图
消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技
React列表渲染与独立状态管理:避免全局状态影响局部更新
SteamMachine定价或为699美元 大家想入手吗?
Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
DLsite中文平台入口 DLsite官网内容在线查看
微博网页版直接访问 微博网页版账号管理快速入口
Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
C++如何实现单例模式_C++设计模式之线程安全的单例写法
谷歌邮箱注册显示错误Gmail服务器异常与延迟处理
Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】
windows10怎么关闭系统提示音_windows10彻底静音设置方法
CSS实现侧边栏导航项全宽圆角悬停背景效果
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
如何将HTML表格多行数据保存到Google Sheet


2025-11-01
浏览次数:次
返回列表