Golang并发任务错误收集与处理示例

使用errgroup可实现并发任务的错误收集与快速失败,通过WithContext支持取消机制;若需汇总所有错误,则可用带缓冲channel配合WaitGroup,避免阻塞并确保正确关闭。

golang并发任务错误收集与处理示例

在Go语言中处理并发任务时,经常会遇到多个goroutine同时执行并可能返回错误的情况。如何安全地收集这些错误,并在所有任务完成或任意一个任务出错时做出响应,是编写健壮并发程序的关键。下面是一个实用的错误收集与处理示例。

使用errgroup.Group(推荐方式)

errgroup 是官方扩展包 golang.org/x/sync/errgroup 提供的工具,能简化并发任务的错误传播和等待逻辑。

它允许你启动多个goroutine,并在任意一个返回非nil错误时自动取消其他任务(如果配合context使用),同时只返回第一个发生的错误。

示例代码:

package main

import ("context""fmt""time"

"golang.org/x/sync/errgroup"

)

立即学习“go语言免费学习笔记(深入)”;

func main() {ctx := context.Background()g, ctx := errgroup.WithContext(ctx)

urls := []string{    "https://httpbin.org/status/200",    "https://www.php.cn/link/874b2add857bd9bcc60635a51eb2b697", // 模拟失败    "https://httpbin.org/status/200",}for _, url := range urls {    url := url // 注意变量捕获    g.Go(func() error {        return fetchURL(ctx, url)    })}if err := g.Wait(); err != nil {    fmt.Printf("请求失败: %vn", err)} else {    fmt.Println("所有任务成功完成")}

}

func fetchURL(ctx context.Context, url string) error {select {case https://www.php.cn/link/874b2add857bd9bcc60635a51eb2b697" {return fmt.Errorf("请求 %s 失败,服务器错误", url)}fmt.Printf("成功获取: %sn", url)return nilcase

在这个例子中,只要有一个fetchURL返回错误,g.Wait() 就会立即返回该错误,其余正在运行的任务也会因context被取消而尽快退出。

手动通过channel收集所有错误

如果你希望收集所有任务的错误而不是仅第一个,可以使用带缓冲的error channel。

这种方式适合需要汇总全部结果的场景,比如批量任务中统计成功与失败数量。

示例代码:

package main

import ("fmt""sync")

func main() {var wg sync.WaitGrouperrCh := make(chan error, 3) // 缓冲channel,避免阻塞

tasks := []string{"task-1", "task-2", "task-3"}for _, task := range tasks {    wg.Add(1)    go func(t string) {        defer wg.Done()        err := processTask(t)        if err != nil {            errCh  0 {    fmt.Printf("共发生 %d 个错误:n", len(errors))    for _, e := range errors {        fmt.Println(e)    }} else {    fmt.Println("所有任务成功")}

}

func processTask(name string) error {if name == "task-2" {return fmt.Errorf("模拟处理失败")}fmt.Printf("任务 %s 成功完成n", name)return nil}

注意:errCh 必须有足够容量或由独立goroutine接收,否则发送错误可能导致goroutine阻塞,进而引发deadlock。

选择合适的策略

选择哪种方式取决于你的业务需求:

想在第一个错误发生时快速失败?用 errgroup需要知道所有任务的执行结果?用 error channel + WaitGroup任务间有关联且需取消机制?结合 context 使用 errgroup

基本上就这些。实际项目中推荐优先使用 errgroup,简洁且语义清晰。手动管理错误channel则提供更大的灵活性,但要注意资源释放和channel关闭问题。

以上就是Golang并发任务错误收集与处理示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1411175.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Go语言智能编辑器:类型信息提取与自动补全实现指南
上一篇 2025年12月16日 03:58:33
GolangUDP广播与多客户端通信实践
下一篇 2025年12月16日 03:58:50

相关推荐

  • win10提示“你的电脑遇到问题,需要重新启动”_Win10蓝屏错误INACCESSIBLE_BOOT_DEVICE等问题的修复

    win10提示“你的电脑遇到问题,需要重新启动”_Win10蓝屏错误INACCESSIBLE_BOOT_DEVICE等问题的修复win10提示“你的电脑遇到问题,需要重新启动”_Win10蓝屏错误INACCESSIBLE_BOOT_DEVICE等问题的修复win10提示“你的电脑遇到问题,需要重新启动”_Win10蓝屏错误INACCESSIBLE_BOOT_DEVICE等问题的修复win10提示“你的电脑遇到问题,需要重新启动”_Win10蓝屏错误INACCESSIBLE_BOOT_DEVICE等问题的修复

    蓝屏“INACCESSIBLE_BOOT_DEVICE”通常因引导分区无法访问或驱动问题导致,可通过高级启动进入恢复环境,依次尝试启动修复、重建BCD引导配置、禁用快速启动与安全启动,并检查硬盘连接与硬件状态来解决。 如果您在启动Windows 10时看到“你的电脑遇到问题,需要重新启动”的错误提示…

    2026年10月3日 • 用户投稿
    300
  • 微博怎么私信群发_微博私信群发操作方法

    微博怎么私信群发_微博私信群发操作方法微博怎么私信群发_微博私信群发操作方法微博怎么私信群发_微博私信群发操作方法微博怎么私信群发_微博私信群发操作方法

    可通过微博分组功能、第三方工具或企业版接口实现私信群发。①使用微博App创建分组并选择最多20位好友发送私信;②借助WeiboMaster等授权工具批量导入用户ID并设置间隔发送,避免限流;③企业号通过标签体系向5000名互动粉丝定向推送,支持自动回复与状态追踪。 如果您希望在微博上向多位好友批量发…

    2026年10月3日 • 用户投稿
    300
  • MySQL如何设置自动备份 crontab定时备份实战教程

    MySQL如何设置自动备份 crontab定时备份实战教程MySQL如何设置自动备份 crontab定时备份实战教程MySQL如何设置自动备份 crontab定时备份实战教程MySQL如何设置自动备份 crontab定时备份实战教程

    要自动备份mysql数据库,可通过编写备份脚本并配置crontab定时任务实现。首先,创建包含数据库连接信息和备份逻辑的bash脚本,使用mysqldump命令导出数据并压缩,按日期命名备份文件,并可选清理旧文件;其次,将脚本保存为backup_mysql.sh并赋予执行权限;最后,通过cronta…

    2026年10月3日 • 用户投稿
    100
  • 双.11买百吋电视警惕“尺寸骗局”!这2个硬指标才是真刚需

    双.11买百吋电视警惕“尺寸骗局”!这2个硬指标才是真刚需双.11买百吋电视警惕“尺寸骗局”!这2个硬指标才是真刚需双.11买百吋电视警惕“尺寸骗局”!这2个硬指标才是真刚需双.11买百吋电视警惕“尺寸骗局”!这2个硬指标才是真刚需

    又到了一年一度的双.11购物狂欢节,不少注重生活品质的朋友都将百吋电视列入了必买清单。然而,面对%ignore_a_1%上海量的百吋电视产品,价格从几千元到数万元不等,如此巨大的价差背后,究竟暗藏哪些玄机? 不少人满怀期待地把新电视搬回家,却发现白天阳光一照屏幕就变成“反光镜”,看科幻大片时到处都是…

    2026年10月3日 • 用户投稿
    100
  • VSCode调试技巧:配置launch.json实现多环境调试的方法

    通过配置VSCode的launch.json可实现多环境调试。1. 使用env字段设置不同环境变量,如NODE_ENV区分开发、测试、生产环境;2. 利用configurationVariables和inputs定义可选参数,通过下拉菜单动态选择环境,减少配置重复;3. 可调用npm scripts…

    2026年10月3日
    200
  • win10无法启动诊断策略服务_诊断策略服务(DPS)启动失败处理

    win10无法启动诊断策略服务_诊断策略服务(DPS)启动失败处理win10无法启动诊断策略服务_诊断策略服务(DPS)启动失败处理win10无法启动诊断策略服务_诊断策略服务(DPS)启动失败处理win10无法启动诊断策略服务_诊断策略服务(DPS)启动失败处理

    首先检查诊断策略服务状态并手动启动,若无效则通过管理员命令提示符重置服务配置,接着使用SFC和DISM工具修复系统文件,再检查组策略设置确保未禁用该服务,最后重建WMI存储以恢复服务功能。 如果您在使用Windows 10时遇到系统无法正常启动诊断策略服务的问题,可能会导致网络连接、系统更新或其他依…

    2026年10月3日 • 用户投稿
    000
  • 我的XPSDell笔记本为什么死机会蓝屏?内存测试教程

    我的XPSDell笔记本为什么死机会蓝屏?内存测试教程我的XPSDell笔记本为什么死机会蓝屏?内存测试教程我的XPSDell笔记本为什么死机会蓝屏?内存测试教程我的XPSDell笔记本为什么死机会蓝屏?内存测试教程

    首先使用Windows内存诊断工具检测内存错误,其次利用戴尔SupportAssist进行深度硬件排查,最后通过预启动环境运行ePSA诊断程序全面检测内存问题。 如果您尝试访问某个网站,但服务器无法访问,则可能是由于服务器 IP 地址无法解析。以下是解决此问题的步骤: 一、使用Windows内存诊断…

    2026年10月3日 • 用户投稿
    100
  • 如何让豆包AI实现Python数据转换

    如何让豆包AI实现Python数据转换如何让豆包AI实现Python数据转换如何让豆包AI实现Python数据转换如何让豆包AI实现Python数据转换

    豆包ai(doubao)可辅助完成python数据转换任务。1. 可让豆包编写数据转换代码,如将日期字符串转为datetime对象,并支持异常处理;2. 可借助其理清复杂数据结构(如嵌套字典转dataframe)的转换逻辑,并比较不同方法优劣;3. 可用其调试和优化已有代码,提升效率,例如将时间戳转…

    2026年10月3日 • 用户投稿
    100
  • ​Cursor 升级 Tab 模型,实时强化学习提升开发者建议精准度

    ​Cursor 升级 Tab 模型,实时强化学习提升开发者建议精准度​Cursor 升级 Tab 模型,实时强化学习提升开发者建议精准度​Cursor 升级 Tab 模型,实时强化学习提升开发者建议精准度​Cursor 升级 Tab 模型,实时强化学习提升开发者建议精准度

    cursor 是一家基于人工智能的编程平台,近日宣布对其 tab 模型完成了一次重要升级。该模型主要用于为开发者提供代码自动补全建议。此次更新大幅优化了建议质量,显著减少了无效或低价值推荐的数量。数据显示,新版本的 tab 模型相较之前版本,生成的建议总数下降了21%,而用户接受率则提升了28%。 …

    2026年10月3日 • 用户投稿
    000
  • 美图秀秀怎么添加艺术感的滤镜_美图秀秀艺术滤镜使用方法

    美图秀秀怎么添加艺术感的滤镜_美图秀秀艺术滤镜使用方法美图秀秀怎么添加艺术感的滤镜_美图秀秀艺术滤镜使用方法美图秀秀怎么添加艺术感的滤镜_美图秀秀艺术滤镜使用方法美图秀秀怎么添加艺术感的滤镜_美图秀秀艺术滤镜使用方法

    首先使用美图秀秀内置艺术滤镜将照片转为油画、水彩等风格,再叠加颗粒、柔光等特效增强质感,最后通过调节饱和度、对比度及局部光影优化整体艺术效果。 如果您希望让照片呈现出更具创意和视觉冲击力的效果,可以通过美图秀秀为图片添加艺术风格的滤镜。这类滤镜能够将普通照片转化为类似油画、水彩或插画的艺术作品。以下…

    2026年10月3日 • 用户投稿
    000
  • 在 Kotlin 中如何在子类构造函数中覆写抽象属性

    在 Kotlin 中如何在子类构造函数中覆写抽象属性在 Kotlin 中如何在子类构造函数中覆写抽象属性在 Kotlin 中如何在子类构造函数中覆写抽象属性在 Kotlin 中如何在子类构造函数中覆写抽象属性

    本文介绍了在 Kotlin 中如何在子类的构造函数中覆写抽象属性。通过示例代码详细讲解了三种实现方式,并解释了错误代码产生的原因。理解这些方法可以帮助开发者更灵活地处理抽象属性的覆写,并避免常见的错误。 在 Kotlin 中,覆写抽象属性需要在类的顶层声明 override val。以下将介绍几种在…

    2026年10月3日 • 用户投稿
    000
  • 腾讯VIP会员支持哪些支付方式_腾讯VIP会员支付方式大全

    腾讯VIP会员支持哪些支付方式_腾讯VIP会员支付方式大全腾讯VIP会员支持哪些支付方式_腾讯VIP会员支付方式大全腾讯VIP会员支持哪些支付方式_腾讯VIP会员支付方式大全腾讯VIP会员支持哪些支付方式_腾讯VIP会员支付方式大全

    腾讯VIP会员支持微信支付、支付宝、Apple ID账户支付和银行卡直连四种方式。①微信支付:在腾讯视频APP内选择会员套餐,支付时选微信支付,通过密码或生物识别完成付款。②支付宝:开通会员时选择支付宝为支付方式,跳转至支付宝应用或网页端完成授权与付款。③Apple ID账户支付:苹果设备用户在Ap…

    2026年10月3日 • 用户投稿
    000
  • win10更新后网络适配器感叹号_系统更新后网卡驱动出现黄色感叹号

    win10更新后网络适配器感叹号_系统更新后网卡驱动出现黄色感叹号win10更新后网络适配器感叹号_系统更新后网卡驱动出现黄色感叹号win10更新后网络适配器感叹号_系统更新后网卡驱动出现黄色感叹号win10更新后网络适配器感叹号_系统更新后网卡驱动出现黄色感叹号

    网络适配器出现黄色感叹号通常因驱动不兼容或未正确加载,可依次通过设备管理器重新安装驱动、使用Windows更新获取驱动、从官网下载最新驱动、启用隐藏的适配器实例及运行网络疑难解答工具解决。 如果您在完成Windows 10系统更新后发现网络适配器出现黄色感叹号,这通常意味着驱动程序与当前系统不兼容或…

    2026年10月3日 • 用户投稿
    000
  • Visual Studio Code 1.104 正式发布

    Visual Studio Code 1.104 正式发布Visual Studio Code 1.104 正式发布Visual Studio Code 1.104 正式发布Visual Studio Code 1.104 正式发布

    visual studio code 1.104 正式版现已上线,此次版本更新在模型适配性、安全性、开发效率、团队协作、mcp 功能、终端体验、语言支持及社区驱动开发等多个维度带来了全面升级。 核心亮点包括: Visual Studio IntelliCode 微软VS平台的 AI 辅助开发工具 2…

    2026年10月3日 • 用户投稿
    000
  • UC浏览器工具箱里都有什么功能_UC浏览器实用小工具功能大全

    UC浏览器工具箱里都有什么功能_UC浏览器实用小工具功能大全UC浏览器工具箱里都有什么功能_UC浏览器实用小工具功能大全UC浏览器工具箱里都有什么功能_UC浏览器实用小工具功能大全UC浏览器工具箱里都有什么功能_UC浏览器实用小工具功能大全

    UC浏览器内置工具箱提供智能广告拦截、网页摘要、云下载、抢票助手、浏览模式切换及无痕浏览等功能,通过设置可提升浏览效率与体验,如开启广告拦截、使用云下载管理文件、切换电脑版网页等。 如果您在使用UC浏览器时希望提升效率或获得更多娱乐体验,可以探索其内置的工具箱功能。这些小工具集成了多种实用特性,能够…

    2026年10月3日 • 用户投稿
    100
  • 豆包AI生成UI设计规范的诀窍 快速统一视觉风格的指南

    豆包AI生成UI设计规范的诀窍 快速统一视觉风格的指南豆包AI生成UI设计规范的诀窍 快速统一视觉风格的指南豆包AI生成UI设计规范的诀窍 快速统一视觉风格的指南豆包AI生成UI设计规范的诀窍 快速统一视觉风格的指南

    做ui设计时,风格统一可通过豆包ai辅助实现。1. 明确核心视觉语言:利用豆包ai快速整理颜色、字体、间距等基础规则,如推荐科技类app的蓝灰配色方案及字体组合,并标准化命名与层级分组。2. 建立组件库模板:通过ai生成常见组件清单及结构化描述,减少重复劳动并确保一致性,建议清晰命名并附使用说明。3…

    2026年10月3日 • 用户投稿
    000
  • xAI 正在测试 Grok 4 Fast,宣称是“地球上最快思考模型”

    xAI 正在测试 Grok 4 Fast,宣称是“地球上最快思考模型”xAI 正在测试 Grok 4 Fast,宣称是“地球上最快思考模型”xAI 正在测试 Grok 4 Fast,宣称是“地球上最快思考模型”xAI 正在测试 Grok 4 Fast,宣称是“地球上最快思考模型”

    xai 已启动 grok 4 fast 的灰度测试,并公开宣称其为“当前全球响应速度最快的思考模型”。 据官方介绍,该模型是 Grok 4 的高性能加速版本,目前已在 Grok 网页端、iOS 客户端以及 X 平台逐步向部分用户开放体验。 Grok 马斯克发起的基于大语言模型(LLM)的AI聊天机器…

    2026年10月3日 • 用户投稿
    100
  • 在 Kotlin 中于子类构造器中覆写抽象值

    在 Kotlin 中于子类构造器中覆写抽象值在 Kotlin 中于子类构造器中覆写抽象值在 Kotlin 中于子类构造器中覆写抽象值在 Kotlin 中于子类构造器中覆写抽象值

    本文详细介绍了在 Kotlin 中如何正确地在子类构造器中覆写父类抽象属性。通过示例代码,展示了使用主构造器、显式声明覆写属性以及在初始化代码块中覆写属性的多种方法,并解释了常见错误的原因,帮助开发者理解 Kotlin 中属性覆写的机制。 在 Kotlin 中,当子类需要覆写父类的抽象属性时,必须在…

    2026年10月3日 • 用户投稿
    100
  • 5月中国一线城市车型销量TOP20:小米SU7惜败Model Y

    5月中国一线城市车型销量TOP20:小米SU7惜败Model Y5月中国一线城市车型销量TOP20:小米SU7惜败Model Y5月中国一线城市车型销量TOP20:小米SU7惜败Model Y5月中国一线城市车型销量TOP20:小米SU7惜败Model Y

    6月23日,有机构公布了2025年5月中国一线城市车型销量top20: 第一名,特斯拉Model Y,销量5032辆 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 第二名,小米SU7,销量4570辆 第三名,AITO问界M9,销量3104辆…

    2026年10月3日 • 用户投稿
    000
  • win11系统要求不满足如何强制升级_绕过系统检测强制升级指南

    win11系统要求不满足如何强制升级_绕过系统检测强制升级指南win11系统要求不满足如何强制升级_绕过系统检测强制升级指南win11系统要求不满足如何强制升级_绕过系统检测强制升级指南win11系统要求不满足如何强制升级_绕过系统检测强制升级指南

    答案:可通过Rufus制作无检测安装U盘、修改注册表AllowUpgradesWithUnsupportedTPMOrCPU、安装时命令提示符创建Bypass项、替换appraiserres.dll四种方法绕过Windows 11硬件限制完成升级。 如果您尝试将当前系统升级至Windows 11,但…

    2026年10月3日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信