Convert Figma logo to code with AI

uber-go logomultierr

Combine one or more Go errors together

1,057
43
1,057
2

Top Related Projects

A Go (golang) package for representing a list of errors as a single error.

1,222

A comprehensive error handling library for Go

1,505

Error handling library with readable stack traces and flexible formatting support 🎆

Quick Overview

uber-go/multierr is a Go library that provides a way to combine multiple errors into a single error. It allows for easy handling and aggregation of multiple errors, which is particularly useful in concurrent programming or when dealing with complex operations that can produce multiple errors.

Pros

  • Simplifies error handling in scenarios where multiple errors can occur
  • Provides a clean API for combining and accessing multiple errors
  • Supports both Go 1.20+ error joining and pre-1.20 error handling
  • Lightweight and easy to integrate into existing projects

Cons

  • May introduce additional complexity for simple error handling scenarios
  • Requires careful consideration of error priority and ordering
  • Limited built-in functionality for error filtering or custom error types
  • Potential performance overhead when dealing with a large number of errors

Code Examples

  1. Combining multiple errors:
import "go.uber.org/multierr"

err1 := errors.New("error 1")
err2 := errors.New("error 2")
err3 := errors.New("error 3")

combinedErr := multierr.Combine(err1, err2, err3)
fmt.Println(combinedErr)
// Output: error 1; error 2; error 3
  1. Appending errors:
var err error
err = multierr.Append(err, errors.New("first error"))
err = multierr.Append(err, errors.New("second error"))
fmt.Println(err)
// Output: first error; second error
  1. Iterating over errors:
err := multierr.Combine(
    errors.New("error 1"),
    errors.New("error 2"),
    errors.New("error 3"),
)

for i, e := range multierr.Errors(err) {
    fmt.Printf("Error %d: %v\n", i+1, e)
}
// Output:
// Error 1: error 1
// Error 2: error 2
// Error 3: error 3

Getting Started

To use uber-go/multierr in your Go project, follow these steps:

  1. Install the package:

    go get -u go.uber.org/multierr
    
  2. Import the package in your Go code:

    import "go.uber.org/multierr"
    
  3. Start using the multierr functions to combine and handle multiple errors:

    err1 := doSomething()
    err2 := doSomethingElse()
    combinedErr := multierr.Combine(err1, err2)
    if combinedErr != nil {
        log.Printf("Errors occurred: %v", combinedErr)
    }
    

Competitor Comparisons

A Go (golang) package for representing a list of errors as a single error.

Pros of go-multierror

  • Simpler API with fewer methods, making it easier to learn and use
  • Provides a Flatten() method to simplify nested error structures
  • Includes a Prefix() method for adding context to errors

Cons of go-multierror

  • Less performant than multierr for large numbers of errors
  • Lacks advanced features like error filtering and custom formatting
  • Does not support combining errors with non-error values

Code Comparison

multierr:

err1 := errors.New("error 1")
err2 := errors.New("error 2")
merr := multierr.Combine(err1, err2)

go-multierror:

var merr *multierror.Error
merr = multierror.Append(merr, errors.New("error 1"))
merr = multierror.Append(merr, errors.New("error 2"))

Both libraries provide similar functionality for combining multiple errors, but multierr offers a more concise API and additional features. go-multierror, on the other hand, provides a simpler approach with methods for flattening and prefixing errors. The choice between the two depends on specific project requirements, performance needs, and desired error handling capabilities.

1,222

A comprehensive error handling library for Go

Pros of errorx

  • More comprehensive error handling with rich error types and hierarchies
  • Built-in error tracing and stack trace support
  • Provides error wrapping and unwrapping functionality

Cons of errorx

  • More complex API, potentially steeper learning curve
  • Larger codebase and dependency footprint
  • May be overkill for simpler projects or use cases

Code Comparison

errorx:

err := errorx.Decorate(originalError, "additional context")
if errorx.IsOfType(err, MyErrorType) {
    // Handle specific error type
}

multierr:

err := multierr.Combine(err1, err2, err3)
if err != nil {
    // Handle combined errors
}

Summary

errorx offers a more feature-rich error handling solution with advanced capabilities like error hierarchies and tracing. It's well-suited for complex applications requiring detailed error management. However, its complexity may be unnecessary for simpler projects.

multierr focuses on combining multiple errors into a single error value, providing a straightforward way to handle multiple error cases. It's lightweight and easy to use but lacks some of the advanced features found in errorx.

Choose errorx for comprehensive error handling in larger projects, and multierr for simpler error combining needs in smaller applications or when a minimal dependency footprint is preferred.

1,505

Error handling library with readable stack traces and flexible formatting support 🎆

Pros of eris

  • Provides more detailed error wrapping with stack traces and additional context
  • Offers error formatting and printing utilities for better error reporting
  • Includes error cause comparison and type assertion helpers

Cons of eris

  • More complex API compared to multierr's simpler approach
  • Potentially higher memory usage due to stack trace capturing
  • May introduce additional dependencies

Code Comparison

eris:

err := eris.New("base error")
wrappedErr := eris.Wrap(err, "wrapped error")
fmt.Println(eris.ToString(wrappedErr, true))

multierr:

err1 := errors.New("error 1")
err2 := errors.New("error 2")
combined := multierr.Combine(err1, err2)
fmt.Println(combined)

Summary

eris offers more advanced error handling features with stack traces and formatting options, while multierr focuses on combining multiple errors. eris provides a richer set of tools for error management but comes with increased complexity. multierr, on the other hand, offers a simpler API for combining errors without additional context. The choice between the two depends on the specific error handling requirements of your project.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

multierr GoDoc Build Status Coverage Status

multierr allows combining one or more Go errors together.

Features

  • Idiomatic: multierr follows best practices in Go, and keeps your code idiomatic.
    • It keeps the underlying error type hidden, allowing you to deal in error values exclusively.
    • It provides APIs to safely append into an error from a defer statement.
  • Performant: multierr is optimized for performance:
    • It avoids allocations where possible.
    • It utilizes slice resizing semantics to optimize common cases like appending into the same error object from a loop.
  • Interoperable: multierr interoperates with the Go standard library's error APIs seamlessly:
    • The errors.Is and errors.As functions just work.
  • Lightweight: multierr comes with virtually no dependencies.

Installation

go get -u go.uber.org/multierr@latest

Status

Stable: No breaking changes will be made before 2.0.


Released under the MIT License.