# merror

[![GoDoc](https://godoc.org/github.com/wiggin77/merror?status.svg)](https://godoc.org/github.com/wiggin77/merror)
![Build Status](https://github.com/wiggin77/merror/actions/workflows/ci.yml/badge.svg?event=push)

Multiple Error aggregator for Go.

## Usage

```go
func foo() error {
  merr := merror.New()

  if err := DoSomething(); err != nil {
    merr.Append(err)
  }

  return merr.ErrorOrNil()
}
```

A bounded `merror` can be used to guard against memory ballooning.

```go
func bar() error {
  merr := merror.NewWithCap(10)

  for i := 0; i < 15; i++ {
    if err := DoSomething(); err != nil {
      merr.Append(err)
    }
  }

  fmt.Printf("Len: %d,  Overflow: %d", merr.Len(), merr.Overflow()) 
  // Len: 10,  Overflow: 5

  return merr.ErrorOrNil()
}
```

## errors.Is

If any of the errors appended to a `merror` match the target error passed to `errors.Is(err, target error)` then true is returned.

## errors.As

If any of the errors appended to a `merror` match the target type passed to `errors.As(err error, target any)` then true is returned and the target is set to the matching error.