Reports type assertion or type switch on errors, for example, err.(*MyErr) or switch err.(type), and suggests using errors.As instead.

Since Go 1.13, errors can be wrapped using the fmt.Errorf function with the %w verb. Therefore, type assertion or type switch on errors fails on wrapped errors. The preferred way for checking for a specific error type is to use the errors.As function from the standard library as this function traverses the chain of the wrapped errors while checking for a specific error type.

For more information about errors.As, refer to working with Errors in Go 1.13.

The quick-fix replaces type assertion and type switch on errors with a call to errors.As.

Example


errFoo, ok := err.(*ErrFoo)


switch err.(type) {
  case *ErrBar:
}

After the quick fix is applied:


var errFoo *ErrFoo
ok := errors.As(err, &errFoo)

var errBar *ErrBar
switch {
case errors.As(err, &errBar):
}