Skip to content

Instantly share code, notes, and snippets.

@byrnedo
Created November 16, 2022 14:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save byrnedo/581ce55ba7024b9e4032f22aa04543e2 to your computer and use it in GitHub Desktop.
Save byrnedo/581ce55ba7024b9e4032f22aa04543e2 to your computer and use it in GitHub Desktop.
Multierror.go, mutliple go error container.
// MultiError don't use directly, use NewMultiError
type MultiError map[string]error
// NewMultiError returns nil if all errs are nil
func NewMultiError(errs map[string]error) error {
for k, v := range errs {
if v == nil {
delete(errs, k)
}
}
if len(errs) == 0 {
return nil
}
return MultiError(errs)
}
func (m MultiError) Error() string {
var errStrs []string
for k, v := range m {
errStrs = append(errStrs, fmt.Sprintf("%s: %s", k, v.Error()))
}
if len(errStrs) == 0 {
panic("multi error used without errors")
}
return strings.Join(errStrs, ".\n")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment