open-nomad/vendor/github.com/hashicorp/go-multierror
Seth Hoenig 435c0d9fc8 deps: Switch to Go modules for dependency management
This PR switches the Nomad repository from using govendor to Go modules
for managing dependencies. Aspects of the Nomad workflow remain pretty
much the same. The usual Makefile targets should continue to work as
they always did. The API submodule simply defers to the parent Nomad
version on the repository, keeping the semantics of API versioning that
currently exists.
2020-06-02 14:30:36 -05:00
..
.travis.yml deps: Switch to Go modules for dependency management 2020-06-02 14:30:36 -05:00
LICENSE Using godeps to build 2016-02-12 10:02:16 -08:00
Makefile Update go-multierror library 2019-10-25 09:25:42 -04:00
README.md Update go-multierror library 2019-10-25 09:25:42 -04:00
append.go Update go-multierror library 2019-10-25 09:25:42 -04:00
flatten.go Using godeps to build 2016-02-12 10:02:16 -08:00
format.go Update go-multierror library 2019-10-25 09:25:42 -04:00
go.mod Update go-multierror library 2019-10-25 09:25:42 -04:00
go.sum Update go-multierror library 2019-10-25 09:25:42 -04:00
group.go Update go-multierror to 72917a1 2019-12-13 10:13:31 -05:00
multierror.go Update go-multierror library 2019-10-25 09:25:42 -04:00
prefix.go Using godeps to build 2016-02-12 10:02:16 -08:00
sort.go Update go-multierror library 2019-10-25 09:25:42 -04:00

README.md

go-multierror

Build Status Go Documentation

go-multierror is a package for Go that provides a mechanism for representing a list of error values as a single error.

This allows a function in Go to return an error that might actually be a list of errors. If the caller knows this, they can unwrap the list and access the errors. If the caller doesn't know, the error formats to a nice human-readable format.

go-multierror implements the errwrap interface so that it can be used with that library, as well.

Installation and Docs

Install using go get github.com/hashicorp/go-multierror.

Full documentation is available at http://godoc.org/github.com/hashicorp/go-multierror

Usage

go-multierror is easy to use and purposely built to be unobtrusive in existing Go applications/libraries that may not be aware of it.

Building a list of errors

The Append function is used to create a list of errors. This function behaves a lot like the Go built-in append function: it doesn't matter if the first argument is nil, a multierror.Error, or any other error, the function behaves as you would expect.

var result error

if err := step1(); err != nil {
	result = multierror.Append(result, err)
}
if err := step2(); err != nil {
	result = multierror.Append(result, err)
}

return result

Customizing the formatting of the errors

By specifying a custom ErrorFormat, you can customize the format of the Error() string function:

var result *multierror.Error

// ... accumulate errors here, maybe using Append

if result != nil {
	result.ErrorFormat = func([]error) string {
		return "errors!"
	}
}

Accessing the list of errors

multierror.Error implements error so if the caller doesn't know about multierror, it will work just fine. But if you're aware a multierror might be returned, you can use type switches to access the list of errors:

if err := something(); err != nil {
	if merr, ok := err.(*multierror.Error); ok {
		// Use merr.Errors
	}
}

Returning a multierror only if there are errors

If you build a multierror.Error, you can use the ErrorOrNil function to return an error implementation only if there are errors to return:

var result *multierror.Error

// ... accumulate errors here

// Return the `error` only if errors were added to the multierror, otherwise
// return nil since there are no errors.
return result.ErrorOrNil()