Multi error: Concurrent safe representation of a list of errors as a single error.
Data error: Additional context for error using data fields and cause (previous) error.
go get github.com/gravitton/errorsThis package is a drop-in replacement for the standard library errors package. It re-exports New, Unwrap, Is, As, AsType, and Join unchanged, so you can swap the import and gain DataError, MultiError without changing any existing call sites.
- "errors"+ "github.com/gravitton/errors"import (
"github.com/gravitton/errors"
)
funcProcess() error {
iferr:=subProcess(); err!=nil {
returnerrors.Wrap(err).WithField("process", "abc").WithCause(err)
}
returnerrors.Newf("this should not happen %s", "again")
}import (
"sync""github.com/gravitton/errors"
)
funcProcess() error {
errs:=errors.NewMulti()
errs.Add(process(1))
errs.Add(process(2))
returnerrs.ErrorOrNil()
}
funcProcessConcurrent() error {
errs:=errors.NewMulti()
wg:= sync.WaitGroup{}
fori:=0; i<10; i++ {
wg.Add(1)
gofunc(iint) {
deferwg.Done()
iferr:=process(i); err!=nil {
errs.Add(errors.Wrap(err).WithField("process", i))
}
}(i)
}
wg.Wait()
returnerrs.ErrorOrNil()
}The MIT License (MIT). Please see License File for more information.