如何判断Golang错误类型_Golang errors Is与As用法详解


Go 1.13引入errors.Is和errors.As实现安全错误判断:errors.Is用于检查错误链中是否包含特定错误值,errors.As用于提取包装错误中的具体类型,二者均依赖%w正确包装以保持错误链完整性。

如何判断golang错误类型_golang errors is与as用法详解

在Go语言中,判断错误类型是构建健壮应用的关键。随着项目复杂度提升,简单的字符串比较已不足够。Go 1.13引入的errors.Is和errors.As提供了更安全、更强大的方式来处理包装后的错误,成为现代Go错误判断的标准做法。

errors.Is:判断是否包含特定错误值

errors.Is用于检查一个错误或其底层包装的错误链中,是否存在某个预定义的错误值。它适合用来识别像“文件不存在”这类标志性错误。

使用场景包括:

  • 判断操作失败是否因为目标资源未找到(如 os.ErrNotExist)
  • 确认错误是否属于自定义的全局错误变量
  • 在测试中验证函数是否返回了预期的错误类型

直接用 == 比较两个通过 errors.New 创建的错误会失败,因为它们是不同地址的对象。而 errors.Is 能穿透多层包装,自动遍历整个错误链进行匹配。

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

var ErrNotFound = errors.New("not found")

func process() error {
    err := readFile()
    return fmt.Errorf("processing failed: %w", err) // 包装原始错误
}

// 在调用端判断
if errors.Is(err, ErrNotFound) {
    log.Println("资源未找到,执行默认逻辑")
}

errors.As:提取特定类型的错误以访问详细信息

errors.As的作用是将一个泛型的 error 接口,转换为具体的错误结构体类型,从而可以访问该类型独有的字段,比如错误码、状态或原始路径等。

星火作家大神 星火作家大神

星火作家大神是一款面向作家的AI写作工具

星火作家大神 140 查看详情 星火作家大神

当你需要基于错误的具体属性做出决策时,就应该使用它。常见于以下情况:

  • 从数据库错误中提取SQL状态码
  • 获取网络操作错误中的地址和超时信息(如 *net.OpError)
  • 读取自定义错误结构中的元数据

与类型断言相比,errors.As 的优势在于它能深入错误链查找目标类型,即使该错误被多层包装也能成功提取。

type PermissionError struct {
    User string
    Perm string
}

func (e *PermissionError) Error() string {
    return fmt.Sprintf("user %s lacks permission %s", e.User, e.Perm)
}

// 处理时提取具体类型
var target *PermissionError
if errors.As(err, &target) {
    fmt.Printf("权限不足用户: %s\n", target.User)
    // 可根据target.Perm做进一步处理
}

正确包装错误是前提:%w 的使用

errors.Is 和 errors.As 的功能依赖于错误链的完整性。要构建可追溯的错误链,必须在包装旧错误生成新错误时,使用 fmt.Errorf 中的 %w 动词。

如果使用 %v 或其他格式化动词,只会把原错误转成字符串,丢失其类型和结构,导致后续无法用 Is 或 As 进行判断。

// 正确:保留错误链
return fmt.Errorf("failed to open config: %w", err)

// 错误:破坏错误链,仅保留文本
return fmt.Errorf("failed to open config: %v", err)

基本上就这些。掌握 %w 包装、errors.Is 判等、errors.As 提取这三者的配合,就能应对绝大多数Go项目的错误判断需求。

以上就是如何判断Golang错误类型_Golang errors Is与As用法详解的详细内容,更多请关注其它相关文章!


# golang  # go语言  # ai  # 状态码  # 大神  # go  # 网站前三优化  # 福州网站建设备案  # 幼儿网站建设方案小学  # 昆明网站建设与优化  # seo技术培训 揭阳  # 网络营销搜索推广优势  # 宁波债务优化招聘网站  # 淮安公司网站建设价格  # 建筑公司信息化建设网站  # 荥阳小吃加盟网站建设  # 遍历  # 也能  # 如何在  # 就能  # 链中  # 未找到  # 自定义  # 布尔  # 如何判断 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 如何使用 Optional 类型并满足 Pylint 的类型检查  微博网页版访问入口 微博网页版网页端使用指南  Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧  win11资源管理器标签页怎么用 Win11文件管理器多标签高效操作【新功能】  sublime怎么在文件中显示代码结构大纲_sublime符号列表功能  火柴人战争网页版在线玩  J*aScript装饰器_元编程实战  J*aScript字符串_Unicode处理  如何快速去除厨房重油污? 2025年最好用的厨房清洁剂推荐  咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法  企查查官网和爱企查 企查查企业查询官网入口  Flash AS3.0简易相册制作  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局  百度网盘如何设置上传限额  J*aScript二进制处理_ArrayBuffer与Blob  怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】  如何在CSS中实现盒模型多列间距_grid-gap与padding结合  《海豚家》注销账号方法  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧  《淘票票》添加到苹果钱包教程  手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入  QQ邮箱手机版网页版 QQ邮箱登录入口地址  抖音小程序怎么开通?小程序开通条件是什么?  C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  优化Leaflet弹出层图片显示:条件渲染策略  快手缓存清理方法  顺丰快递在线查询系统 顺丰快递官方查单入口  解决Go encoding/json 将JSON大数字解析为浮点数的问题  快递优选如何查优选物流_快递优选专属物流渠道查询与配送时效  《鹿路通》退余额方法  如何使用 composer 和 aop-php 实现 AOP 编程?  VB表达式书写规则解析  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复  漫蛙漫画直连入口 _ manwa官方备用入口实时检测  Golang如何使用gRPC拦截器实现日志收集_Golang gRPC拦截器日志收集实践  电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】  TikTok视频播放不流畅怎么办 TikTok视频播放优化方法  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  《百果园》充值余额方法  《宝可梦大集结》S4冠军之路开始时间介绍  Bootstrap 5导航栏折叠功能失效:数据属性迁移指南  word表格如何按某一列内容进行排序_Word表格按列排序方法  excel怎么计算平均值 excel平均函数*ERAGE使用教学  使用Python和NLTK从文本中高效提取名词的实用教程  word文档中的分隔符有哪些不同类型和用途_Word分隔符类型与用途方法  SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  AngularJS动态内容中DOM元素查找的时序问题及$timeout解决方案 

 2025-12-08

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.