报告错误的类型断言或类型 switch,例如 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):
}