From 2d1617a32729daf480c399fc7d8941cbf85c6d7e Mon Sep 17 00:00:00 2001 From: s-beats Date: Sun, 7 Nov 2021 12:09:48 +0900 Subject: [PATCH 1/2] chore: change module name, change package name --- errs.go | 2 +- errs_test.go | 4 ++-- example_test.go | 12 ++++++------ go.mod | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/errs.go b/errs.go index a251c65..f86c3e2 100644 --- a/errs.go +++ b/errs.go @@ -1,4 +1,4 @@ -package errs +package merr import ( "bytes" diff --git a/errs_test.go b/errs_test.go index cb3059f..dc8c4f8 100644 --- a/errs_test.go +++ b/errs_test.go @@ -1,4 +1,4 @@ -package errs +package merr import ( "bytes" @@ -191,7 +191,7 @@ func Test_errs_PrettyPrint(t *testing.T) { &somethingError{}, }, }, - "Errors[\n &errs.somethingError{},\n]", + "Errors[\n &merr.somethingError{},\n]", }, { "print nil", diff --git a/example_test.go b/example_test.go index 6afc491..751fbfa 100644 --- a/example_test.go +++ b/example_test.go @@ -1,10 +1,10 @@ -package errs_test +package merr_test import ( "fmt" "os" - "github.com/gemcook/errs" + "github.com/gemcook/merr" ) type structError struct { @@ -28,7 +28,7 @@ func (*ptrError) Error() string { } func Example() { - err := errs.New() + err := merr.New() // error interface err.Append(fmt.Errorf("%w", fmt.Errorf("wrap error"))) @@ -49,7 +49,7 @@ func Example() { } err.Append(ptrErr) - errs.SetOutput(os.Stdout) + merr.SetOutput(os.Stdout) err.PrettyPrint() // output: @@ -60,12 +60,12 @@ func Example() { // s: "wrap error", // }, // }, - // errs_test.structError{ + // merr_test.structError{ // i: 1, // str: "error", // b: true, // }, - // &errs_test.ptrError{ + // &merr_test.ptrError{ // i: 1, // str: "error", // b: true, diff --git a/go.mod b/go.mod index 1b4cba8..6ce7ccb 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/gemcook/errs +module github.com/gemcook/merr go 1.17 From 0182fb9291a8abbc6ff73bf8e70e1db9a53ff8bc Mon Sep 17 00:00:00 2001 From: s-beats Date: Sun, 7 Nov 2021 15:24:35 +0900 Subject: [PATCH 2/2] feat: add README feat: add README feat: add README feat: add README feat: add README feat: add README feat: add README --- README.md | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++ errs.go | 2 +- errs_test.go | 4 +- 3 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..2c50ab2 --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# merr + +[![Analysis](https://github.com/gemcook/merr/actions/workflows/analysis.yml/badge.svg)](https://github.com/gemcook/merr/actions/workflows/analysis.yml) ![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/gemcook/merr) + +`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 + +```sh +go get -u github.com/gemcook/merr +``` + +## Usage + +```go +import "github.com/gemcook/merr" +``` + +### Appends error + +Appends error to list of errors. +If there is no error list, it creates a new one. + +```go +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`. + +```go +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. + +```go +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. + +```go +buf := bytes.NewBuffer(nil) +merr.SetOutput(buf) +``` + +## License + +MIT License diff --git a/errs.go b/errs.go index f86c3e2..c02f6e7 100644 --- a/errs.go +++ b/errs.go @@ -27,7 +27,7 @@ var ( var formatter = func(e *errs) string { var result string - suffix := ",\n" + suffix := "\n" for i, err := range e.Errors { if len(e.Errors)-1 == i { suffix = "" diff --git a/errs_test.go b/errs_test.go index dc8c4f8..2f466fd 100644 --- a/errs_test.go +++ b/errs_test.go @@ -35,7 +35,7 @@ func Test_errs_Error(t *testing.T) { fmt.Errorf("%s", "error2"), }, }, - "error1,\nerror2", + "error1\nerror2", }, { "check/error/wrapped", @@ -46,7 +46,7 @@ func Test_errs_Error(t *testing.T) { fmt.Errorf("%w", &somethingError{}), }, }, - "something error,\nsomething error", + "something error\nsomething error", }, } for _, tt := range tests {