merr

package module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 4, 2022 License: MIT Imports: 9 Imported by: 0

README

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

Documentation

Overview

Example
package main

import (
	"fmt"
	"os"

	"github.com/gemcook/merr"
)

type structError struct {
	i   int
	str string
	b   bool
}

func (structError) Error() string {
	return "structError"
}

type ptrError struct {
	i   int
	str string
	b   bool
}

func (*ptrError) Error() string {
	return "ptrError"
}

func main() {
	err := merr.New()

	// error interface
	err.Append(fmt.Errorf("%w", fmt.Errorf("wrap error")))

	// struct
	var structErr structError = structError{
		i:   1,
		str: "error",
		b:   true,
	}
	err.Append(structErr)

	// ptr
	var ptrErr *ptrError = &ptrError{
		i:   1,
		str: "error",
		b:   true,
	}
	err.Append(ptrErr)

	merr.SetOutput(os.Stdout)
	err.PrettyPrint()

}
Output:

Errors[
  &fmt.wrapError{
    msg: "wrap error",
    err: &errors.errorString{
      s: "wrap error",
    },
  },
  merr_test.structError{
    i:   1,
    str: "error",
    b:   true,
  },
  &merr_test.ptrError{
    i:   1,
    str: "error",
    b:   true,
  },
]

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetOutput

func GetOutput() io.Writer

func ResetOutput

func ResetOutput()

func SetNewLine added in v1.1.0

func SetNewLine(n string)

SetNewLine is a function to set the newline code.

Only "\n" , "\r\n" or "\r" are allowed. If they do not apply, the default value ("\n") is used.

func SetOutput

func SetOutput(out io.Writer)

Types

type Errs

type Errs interface {
	Append(err error)
	Error() string
	ErrorOrNil() error
	Is(target error) bool
	As(target interface{}) bool
	PrettyPrint()
}

func New

func New() Errs

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL