err.(*MyErr)
或 switch err.(type)
,并建议改用 errors.As
。
从 Go 1.13 开始,可以使用 fmt.Errorf
函数和 %w
动词来包装错误。 因此,错误的类型断言或类型 switch 会在包装的错误上失败。 检查特定错误类型的首选方式是使用标准库中的 errors.As 函数,因为此函数会在检查特定错误类型时遍历包装错误链。
有关 errors.As
的详细信息,请参阅 working with Errors in Go 1.13。
该快速修复会将错误的类型断言和类型 switch 替换为对 errors.As
的调用。
示例
errFoo, ok := err.(*ErrFoo)
switch err.(type) {
case *ErrBar:
}
在应用快速修复后:
var errFoo *ErrFoo
ok := errors.As(err, &errFoo)
var errBar *ErrBar
switch {
case errors.As(err, &errBar):
}