Skip to content

gemcook/merr

Repository files navigation

merr

Analysis GitHub go.mod Go version

merr is a package that binds multiple errors.

Features

merr has pretty print, which outputs the bound errors in a well-formatted and easy-to-understand format. It is also possible to change the output destination if necessary, which is very useful for debugging.

Installation

go get -u github.com/gemcook/merr

Usage

import "github.com/gemcook/merr"

Determine if it's an error

multiError := merr.New()

// do something...

// error handling example
if multiError.ErrorOrNil() != nil {
    return multiError
}
return nil

Appends error

Appends error to list of errors. If there is no error list, it creates a new one.

multiError := merr.New()

for i := 0; i < 10; i++ {
    if err := something(); err != nil {
        multiError.Append(err)
    }
}

Print list of error

Prints the object of the list of errors, separated by ,\n.

multiError := merr.New()

for i := 0; i < 10; i++ {
    // something() returns &errors.errorString{s: "something error"}
    if err := something(); err != nil {
        multiError.Append(err)
    }
}

fmt.Println(multiError.Error())
"something error",
"something error",
  .
  .
  .
"something error"

Pretty print

Prints a list of errors in a well-formatted, easy-to-understand format.

multiError := merr.New()

for i := 0; i < 10; i++ {
    // something() returns &errors.errorString{s: "something error"}
    if err := something(); err != nil {
        multiError.Append(err)
    }
}

multiError.PrettyPrint()
Errors[
  &errors.errorString{
    s: "something error",
  },
  &errors.errorString{
    s: "something error",
  },
  &errors.errorString{
    s: "something error",
  },
  .
  .
  .
  &errors.errorString{
    s: "something error",
  },
]

The default output destination is the standard output. You can also change the output destination.

buf := bytes.NewBuffer(nil)
merr.SetOutput(buf)

License

MIT License