go-errorlint
go-errorlint is a source code linter for Go software that can be used to find code that will cause problems with the error wrapping scheme introduced in Go 1.13.
Error wrapping allows for extra context in errors without sacrificing type information about the error's cause.
For details on Go error wrapping, see: https://golang.org/pkg/errors/
Usage
go-errorlint accepts a set of package names similar to golint:
go-errorlint ./...
If there are one or more results, the exit status is set to 1.
Caveats:
- When using the
-errorflint, keep in mind that any errors wrapped byfmt.Errorfimplicitly become part of your API as according to Hyrum's Law.
Examples
fmt.Errorf wrapping verb
This lint must be enabled with the -errorf flag.
// bad
fmt.Errorf("oh noes: %v", err)
// ^ non-wrapping format verb for fmt.Errorf. Use `%w` to format errors
// good
fmt.Errorf("oh noes: %w", err)Comparisons of errors
// bad
err == ErrFoo
// ^ comparing with == will fail on wrapped errors. Use errors.Is to check for a specific error
// good
errors.Is(err, ErrFoo)Switch statements are also checked.
Type assertions of errors
// bad
myErr, ok := err.(*MyError)
// ^ type assertion on error will fail on wrapped errors. Use errors.As to check for specific errors
// good
var me MyError
ok := errors.As(err, &me)Type switch statements are also checked.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
