Skip to content

Instantly share code, notes, and snippets.

@mbertschler
Created November 23, 2020 18:18
Show Gist options
  • Save mbertschler/6a70d192e124031f54c1f24b78824176 to your computer and use it in GitHub Desktop.
Save mbertschler/6a70d192e124031f54c1f24b78824176 to your computer and use it in GitHub Desktop.
Combine Go Errors
package main
import (
"testing"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
)
func combineErrors(errs ...error) error {
messages := []string{}
var nonNilErr error
for _, err := range errs {
if err != nil {
messages = append(messages, "["+err.Error()+"]")
nonNilErr = err
}
}
if len(messages) == 0 {
return nil
}
if len(messages) == 1 {
return nonNilErr
}
return errors.New(strings.Join(messages, " + "))
}
func TestCombineErrors(t *testing.T) {
err1 := errors.New("err1")
err2 := errors.New("err2")
err3 := errors.New("err3")
err := combineErrors(err1, err2, err3)
assert.EqualError(t, err, "[err1] + [err2] + [err3]")
err = combineErrors(err1, nil, err3)
assert.EqualError(t, err, "[err1] + [err3]")
err = combineErrors(nil, nil, err3)
assert.EqualError(t, err, "err3")
err = combineErrors(nil, nil, nil)
assert.NoError(t, err)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment