全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用Golang实现fan-out fan-in模式_分发任务并汇总结果

Go 实现 fan-out fan-in 模式需并发启动 worker 处理任务(fan-out),通过 channel 收集结果(fan-in);关键用 WaitGroup 确保所有 worker 完成后关闭结果 channel,或用 context 控制超时与取消。

用 Go 实现 fan-out fan-in 模式,核心是:启动多个 goroutine 并行处理任务(fan-out),再通过 channel 收集所有结果(fan-in)。关键在于控制并发、避免 goroutine 泄漏、正确关闭 channel 和处理错误。

1. 基础 fan-out fan-in 结构

使用一个输入 channel 分发任务,多个 worker 从中读取;每个 worker 处理完后将结果发到统一的输出 channel。主 goroutine 负责启动 worker、发送任务、接收并汇总结果。

注意:输出 channel 通常由主 goroutine 创建,worker 只写入;要用 goroutine + rangesync.WaitGroup 确保所有 worker 完成后再关闭输出 channel。

2. 使用 WaitGroup 控制 worker 生命周期

适合任务数量固定、需等待全部完成的场景。WaitGroup 让主 goroutine 知道何时所有 worker 已退出,从而安全关闭结果 channel。

  • 启动前调用 wg.Add(n),每个 worker 执行完 wg.Done()
  • 另起一个 goroutine 调用 wg.Wait() 后关闭结果 channel
  • 输入 channel 可以直接 close,worker 用 for job := range jobs 自动退出

3. 使用 context 控制超时和取消

当任务可能阻塞或需提前终止时,把 context.Context 传给 worker。worker 在处理中定期检查 ctx.Done(),及时退出。

  • context.WithTimeoutcontext.WithCancel 包装原始 context
  • worker 内部用 select { case 响应取消
  • 主 goroutine 中 select 等待结果或超时,避免无限等待

4. 错误处理与结果聚合

不要只返回值,要同时返回 error。结果 channel 类型建议为 struct{ Value T; Err error },避免因某个 worker panic 或出错导致整个流程中断。

  • 每个 worker 单独 recover panic,转为 error 发送到结果 channel
  • 主 goroutine 遍历结果 channel 时检查 Err 字段,决定是否继续收集还是提前返回
  • 汇总逻辑(如 sum、merge、first non-nil)放在主 goroutine 中,保持 worker 职责单一

不复杂但容易忽略:channel 容量、worker 数量设置、是否需要缓冲 channel、如何区分成功/失败结果。实际使用时建议封装成可复用函数,接受任务切片、worker 数、处理函数和上下文作为参数。


# go  # golang  # ai  # for  # select  # 并发  # channel  # 多个  # 完成后  # 放在  # 遍历  # 要用  # 可以直接  # 发送到  # 完后  # 关键在于  # 或用 


相关文章: 天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何选择高性价比服务器搭建个人网站?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  建站ABC备案流程中有哪些关键注意事项?  建站之星如何修改网站生成路径?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  建站之星如何快速解决建站难题?  代刷网站制作软件,别人代刷火车票靠谱吗?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  建站之星免费模板:自助建站系统与智能响应式一键生成  长沙企业网站制作哪家好,长沙水业集团官方网站?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  红河网站制作公司,红河事业单位身份证如何上传?  建站之家VIP精选网站模板与SEO优化教程整合指南  建站之星如何实现网站加密操作?  如何通过VPS搭建网站快速盈利?  如何选择高效稳定的ISP建站解决方案?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何配置WinSCP新建站点的密钥验证步骤?  南平网站制作公司,2025年南平市事业单位报名时间?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  在线教育网站制作平台,山西立德教育官网?  ,怎么用自己头像做动态表情包?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  网站制作新手教程,新手建设一个网站需要注意些什么?  建站之星安装路径如何正确选择及配置?  导航网站建站方案与优化指南:一站式高效搭建技巧解析  如何在宝塔面板创建新站点?  如何通过WDCP绑定主域名及创建子域名站点?  ,交易猫的商品怎么发布到网站上去?  香港服务器选型指南:免备案配置与高效建站方案解析  免费视频制作网站,更新又快又好的免费电影网站?  如何解决VPS建站LNMP环境配置常见问题?  装修招标网站设计制作流程,装修招标流程?  高防服务器:AI智能防御DDoS攻击与数据安全保障  建站之星备案流程有哪些注意事项?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  教学论文网站制作软件有哪些,写论文用什么软件 ?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  网站制作公司排行榜,抖音怎样做个人官方网站  网站网页制作专业公司,怎样制作自己的网页?  如何在Windows服务器上快速搭建网站?  建站之星3.0如何解决常见操作问题? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。