errors 基本使用

package errors 中实现了对 error 类型数据的相关操作函数

概念

如果一个错误类型有一个 Unwrap 方法返回一个错误类型,则说该错误包装(wrap)另外一个错误。比如说 e.Unwrap()返回一个非 nil 的错误类型 w,那么我们说 e 包装(wrap)了 w

Unwrap 方法打开一个被包装的错误,如果它的参数类型含有 Unwrap 方法,它会调用该方法一次,否则它返回 nil

一个创建 wrapped errors 最简单的方法就是调用fmt.Errorf函数,并且使用%w占位符(%w 与%v 相同,只不过对于参数为 error 类型的数据,使用%w 会实现 Unwrap 方法)

errors.Unwrap(fmt.Errorf("... %w ...", ..., err, ...))
// 这个方法返回的就是err本身

方法使用

func As(err error, target interface{}) bool

As 方法在 err 链中找到和 target 错误匹配的第一个错误,并且将该错误赋值给 target,并返回 true,否则返回 false

这个链由 err 本身和通过重复调用 Unwrap 获得的错误序列组成

As 方法会 panic 如果 target 不是一个指向实现了 error 的空指针类型或者接口

// 下面两个方式都可以将perr定义为os.PathError
// 并赋值,但是使用第一种方式更好
var perr *os.PathError
if errors.As(err, &perr) {
	fmt.Println(perr.Path)
}

if perr, ok := err.(*os.PathError); ok {
	fmt.Println(perr.Path)
}

func Is(err, target error) bool

Is 方法判断是否存在在 err 链中的错误匹配 target

// 第一种方法进行判断是否相等更好
if errors.Is(err, os.ErrExist)
if err == os.ErrExist

func New(text string) error

New 方法返回一个由所给的 text 格式化的错误类型。每一个 New 方法返回的错误都是不同的即使 text 一致

func Unwrap(err error) error

Unwrap 返回 err 调用 Unwrap 方法的结果值(如果该错误类型包含一个返回错误类型的 Unwrap 方法),否则该方法返回 nil


示例代码见 GitHub, 欢迎⭐

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值