https://github.com/go-faster/errors
clear go error wrapping with caller
https://github.com/go-faster/errors
error-handling errors faster go golang
Last synced: about 1 month ago
JSON representation
clear go error wrapping with caller
- Host: GitHub
- URL: https://github.com/go-faster/errors
- Owner: go-faster
- License: bsd-3-clause
- Created: 2021-11-03T06:40:13.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-12-13T12:05:40.000Z (over 1 year ago)
- Last Synced: 2025-03-29T21:03:10.862Z (about 2 months ago)
- Topics: error-handling, errors, faster, go, golang
- Language: Go
- Homepage:
- Size: 143 KB
- Stars: 49
- Watchers: 2
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# errors [](https://pkg.go.dev/github.com/go-faster/errors#section-documentation) [](https://codecov.io/gh/go-faster/errors)
Fork of [xerrors](https://pkg.go.dev/golang.org/x/xerrors) with explicit [Wrap](https://pkg.go.dev/github.com/go-faster/errors#Wrap) instead of `%w`.
> Clear is better than clever.
```
go get github.com/go-faster/errors
``````go
errors.Wrap(err, "message")
```## Why
* Using `Wrap` is the most explicit way to wrap errors
* Wrapping with `fmt.Errorf("foo: %w", err)` is implicit, redundant and error-prone
* Parsing `"foo: %w"` is implicit, redundant and slow
* The [pkg/errors](https://github.com/pkg/errors) and [xerrors](https://pkg.go.dev/golang.org/x/xerrors) are not maintainted
* The [cockroachdb/errors](https://github.com/cockroachdb/errors) is too big
* The `errors` has no caller stack trace## Don't need traces?
Call `errors.DisableTrace` or use build tag `noerrtrace`.## Additional features
### Into
Generic type assertion for errors.
```go
// Into finds the first error in err's chain that matches target type T, and if so, returns it.
//
// Into is type-safe alternative to As.
func Into[T error](err error) (val T, ok bool)
``````go
if pathError, ok := errors.Into[*os.PathError](err); ok {
fmt.Println("Failed at path:", pathError.Path)
}
```### Must
Must is a generic helper, like template.Must, that wraps a call to a function returning (T, error)
and panics if the error is non-nil.```go
func Must[T any](val T, err error) T
```## License
BSD-3-Clause, same as Go sources