Home  >  Article  >  Backend Development  >  How to handle multiple errors simultaneously in Golang?

How to handle multiple errors simultaneously in Golang?

王林
王林Original
2024-06-05 22:47:00820browse

The way to handle multiple errors at the same time in Go is to use errors.Is to check whether the error is the underlying error of another error. Use errors.As to cast errors to a specific type if possible. Use errors.MultiError to create an ErrorGroup object containing multiple errors. Iterate over the ErrorGroup, performing specific actions for each error type.

如何在 Golang 中同时处理多个错误?

How to handle multiple errors simultaneously in Golang?

Handling multiple errors simultaneously in Golang is achieved by using the errors.Is and errors.As functions. errors.Is checks whether an error is the underlying error of another error, while errors.As casts one error to another type, returning true if the conversion is successful, otherwise false.

Usage:

  1. #Determine whether it is an underlying error

    var err error
    
    // 检查 err 是否为 os.ErrNotExist 的底层错误
    if errors.Is(err, os.ErrNotExist) {
        // 处理 os.ErrNotExist 错误
    }
  2. Forcing to a specific type

    if errors.As(err, &someError) {
        // err 可以转换为 someError 类型
    }

Practical case:

Suppose there is a function that needs to call multiple external functions, Every function may return an error. To handle all of these errors at the same time, you can create a multiError using errors.MultiError in a function, then call the individual functions and add the returned errors to the multiError.

import "golang.org/x/xerrors"

func main() {
    // 创建 MultiError
    multiError := errors.MultiError(nil)

    // 调用外部函数并添加错误
    err := f1()
    if err != nil {
        multiError = multiError.Append(err)
    }
    err = f2()
    if err != nil {
        multiError = multiError.Append(err)
    }

    // 处理 MultiError
    if multiError != nil {
        switch {
        case errors.Is(multiError, os.ErrNotExist):
            // 处理 os.ErrNotExist 错误
        case errors.Is(multiError, someError):
            // 处理 someError 错误
        default:
            // 处理其他错误
        }
    }
}

func f1() error {
    return os.Open("no-such-file")
}

func f2() error {
    return someError{err: "some error"}
}

// 自定义错误类型
type someError struct {
    err string
}

func (e someError) Error() string {
    return e.err
}

It is easy to handle multiple simultaneously in Golang by using errors.MultiError and errors.Is/errors.As functions mistake.

The above is the detailed content of How to handle multiple errors simultaneously in Golang?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn