Go 1.13引入errors.Is和errors.As用于精准处理包装错误。1. errors.Is判断错误链中是否包含指定错误值,适用于匹配预定义错误;2. errors.As检查错误链中是否存在特定类型错误并赋值,适用于提取结构化错误信息。两者均支持递归遍历错误链,比传统比较更强大。使用%w包装错误可确保Is/As正常工作,建议在需上下文时包装错误,并用Is替代==、用As提取具体错误类型。

在Go语言中处理错误时,很多时候我们不仅需要知道发生了错误,还需要判断错误的具体类型或是否属于某类预定义错误。从Go 1.13开始,errors 包引入了 errors.Is 和 errors.As 两个函数,用于更精准地进行错误比较和类型断言。它们比传统的 == 或类型断言更强大,尤其是在处理包装错误(wrapped errors)时。
errors.Is(err, target) 用于判断错误链中是否存在某个特定的错误值。它会递归地检查被包装的错误,直到找到匹配项或结束。
适用于你已经有一个具体的错误变量,并希望判断当前错误是否“是”这个错误。
示例:
package main
import (
"errors"
"fmt"
)
var ErrNotFound = errors.New("not found")
func main() {
err := fmt.Errorf("wrap: %w", ErrNotFound)
// 判断 err 是否包含 ErrNotFound
if errors.Is(err, ErrNotFound) {
fmt.Println("error is 'not found'")
}
}
输出:error is 'not found'
即使 ErrNotFound 被包装了一层或多层,errors.Is 依然能正确识别。
errors.As(err, &target) 用于判断错误链中是否有某个特定类型的错误(比如自定义错误结构体),并将该错误赋值给 target 指针。
当你需要访问错误的具体字段或方法时,这个函数非常有用。
示例:
package main
import (
"errors"
"fmt"
)
type ValidationError struct {
Field string
Msg string
}
func (e *ValidationError) Error() string {
return fmt.Sprintf("validation error on field '%s': %s", e.Field, e.Msg)
}
func main() {
err := fmt.Errorf("outer error: %w", &ValidationError{Field: "email", Msg: "invalid format"})
var ve *ValidationError
if errors.As(err, &ve) {
fmt.Printf("validation error on field: %s, message: %s\n", ve.Field, ve.Msg)
}
}
输出:validation error on field: email, message: invalid format
errors.As 遍历错误链,一旦发现可以转换为 *ValidationError 的错误,就将其赋值给 ve。
%w 格式符包装原始错误,否则无法通过 Is/As 正确解析。基本上就这些。合理使用 errors.Is 和 errors.As 可以让 Go 的错误处理更清晰、健壮,特别是在复杂调用链中定位问题时特别有用。
以上就是Golang如何使用errors.As和errors.Is_Golang errors.As errors.Is实践的详细内容,更多请关注其它相关文章!
# 错误处理
# 眉山营销推广报价明细
# 网奇seo赚钱培训
# 更强大
# 是否存在
# 键值
# 遍历
# 两种
# 是在
# 适用于
# golang
# go
# go语言
# app
# ai
# 递归
# 链中
# 如何使用
# 海门市网站优化关键词
# 淘宝seo课程
# 宝鸡专业网站优化建设
# 郑州网校网站建设项目
# 本溪关键词自动排名
# 西安慧抖销关键词排名
# 惠州抖音seo找哪家
# 清水河中小网站建设
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Symfony路由参数转换器:实体存在性验证与错误处理策略
Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置
J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解
Win10输入法不见了怎么办 Win10找回语言栏图标教程
excel怎么计算平均值 excel平均函数*ERAGE使用教学
顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南
支付宝登录刷脸不是本人如何解决
《火花chat》搜索好友方法
解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用
Composer如何使用composer-plugin-api开发自定义插件
西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法
汽水音乐官方网站登录入口_汽水音乐网页版进入链接
狙击外星人小游戏在线链接_狙击外星人小游戏网页链接
铁路12306买票怎么选双人铺 铁路12306卧铺分配规则说明
抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口
Dash应用多值文本输入处理与类型转换教程
Python模块化编程:避免循环导入与共享函数的最佳实践
Golang如何使用gRPC拦截器实现日志收集_Golang gRPC拦截器日志收集实践
Flash AS3.0简易相册制作
暴风影音官网正式版_暴风影音手机版官网下载安卓
《三国:谋定天下》平民全阶段通用阵容
Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改
PDF如何批量加注释_PDF多文件批注高亮操作教程
智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法
我居然低估了 DeepSeek,这次更新它做到了这些!
广州地铁app准妈咪徽章领取方法
AO3永久镜像入口开放_AO3最新网址兼容所有浏览器
iPhone14开启Apple TV遥控设置
哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南
J*aScript与HTML元素交互:图片点击事件与链接处理教程
steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明
WooCommerce 新客户订单自动添加管理员备注教程
LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用
Linux如何开发轻量级数据服务模块_Linux服务化设计
CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条
《咸鱼之王》新版孙坚技能解析
《雷电模拟器》截图方法介绍
电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】
《暗黑破坏神4》国服回归送狂欢礼包 价值6916元
wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式
哔哩哔哩在线观看入口 B站官网免费进入
拷贝漫画2025网页版入口 拷贝漫画官网免费看全集
苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤
使用AI在VS Code中将代码从一种语言翻译成另一种
支付宝如何解绑云闪付_支付宝与云闪付账户关联解除方法
如何查询个人病历记录
《狐友》联系客服方法
VB表达式书写规则解析
如何在CSS中使用伪类选择器_hover实现悬停效果
如何在mysql中使用索引提示_mysql索引提示优化方法
2025-11-23
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。