Go 1.13引入errors.Is和errors.As实现安全错误判断:errors.Is用于检查错误链中是否包含特定错误值,errors.As用于提取包装错误中的具体类型,二者均依赖%w正确包装以保持错误链完整性。
在Go语言中,判断错误类型是构建健壮应用的关键。随着项目复杂度提升,简单的字符串比较已不足够。Go 1.13引入的errors.Is和errors.As提供了更安全、更强大的方式来处理包装后的错误,成为现代Go错误判断的标准做法。
errors.Is用于检查一个错误或其底层包装的错误链中,是否存在某个预定义的错误值。它适合用来识别像“文件不存在”这类标志性错误。
使用场景包括:
os.ErrNotExist)
期的错误类型直接用 == 比较两个通过 errors.New 创建的错误会失败,因为它们是不同地址的对象。而 errors.Is 能穿透多层包装,自动遍历整个错误链进行匹配。
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的作用是将一个泛型的 error 接口,转换为具体的错误结构体类型,从而可以访问该类型独有的字段,比如错误码、状态或原始路径等。
当你需要基于错误的具体属性做出决策时,就应该使用它。常见于以下情况:
*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做进一步处理
}
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项目的错误判断需求。
# go
# golang
# go语言
# ai
# 状态码
# sql
# Error
# 字符串
# 结构体
# 接口
# 泛型
相关文章:
如何在万网自助建站中设置域名及备案?
如何用虚拟主机快速搭建网站?详细步骤解析
如何在云虚拟主机上快速搭建个人网站?
如何配置FTP站点权限与安全设置?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
如何基于云服务器快速搭建网站及云盘系统?
如何构建满足综合性能需求的优质建站方案?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
Thinkphp 中 distinct 的用法解析
大型企业网站制作流程,做网站需要注册公司吗?
如何用VPS主机快速搭建个人网站?
如何通过FTP空间快速搭建安全高效网站?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何通过建站之星自助学习解决操作问题?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何在Tomcat中配置并部署网站项目?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
韩国服务器如何优化跨境访问实现高效连接?
IOS倒计时设置UIButton标题title的抖动问题
如何快速启动建站代理加盟业务?
建站之星如何防范黑客攻击与数据泄露?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
文字头像制作网站推荐软件,醒图能自动配文字吗?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
如何选择域名并搭建高效网站?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
安云自助建站系统如何快速提升SEO排名?
如何破解联通资金短缺导致的基站建设难题?
如何用wdcp快速搭建高效网站?
如何有效防御Web建站篡改攻击?
C++如何编写函数模板?(泛型编程入门)
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
广德云建站网站建设方案与建站流程优化指南
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
广东企业建站网站优化与SEO营销核心策略指南
建站之星安装后如何自定义网站颜色与字体?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何零基础开发自助建站系统?完整教程解析
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
,南京靠谱的征婚网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。