首页 >后端开发 >Golang >如何最好地处理 Go 中的错误?

如何最好地处理 Go 中的错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-27 10:06:10552浏览

How to Best Handle Errors in Go?

Go 中的标准错误变量

在 Golang 中,有多种处理错误的惯用方法。

自定义错误变量

作者经常按照命名约定 Err... 来声明固定错误变量。例如:

var (
        ErrSomethingBad = errors.New("some string")
        ErrKindFoo      = errors.New("foo happened")
)

错误类型

使用对调用者有用的特定信息声明错误类型(...Error)是另一种常见做法。

type SomeError struct {
     // extra information, whatever might be useful to callers
     // (or for making a nice message in `Error()`)
     ExtraInfo int
}
type OtherError string

func (e SomeError) Error() string { /* … */ }
func (e OtherError) Error() string {
        return fmt.Sprintf("failure doing something with %q", string(e))
}

临时错误

如果您不希望用户需要测试特定错误,您可以使用Errors.New创建临时错误。

func SomepackageFunction() error {
        return errors.New("not implemented")
}

使用标准包错误

您可以利用标准包(如io.EOF)中定义的错误。但是,通常最好为自己的包创建自定义错误。

func SomeFunc() error {
        return io.EOF
}

错误接口

创建错误接口允许您检查特定的行为或类型。

type Error interface {
    error
    Timeout() bool   // Is the error a timeout?
    Temporary() bool // Is the error temporary?
}

上下文错误

将此技术与 Go 1.13 或更高版本一起使用,为现有错误提供额外的上下文。

func SomepackageFunction() error {
    err := somethingThatCanFail()
    if err != nil {
            return fmt.Errorf("some context: %w", err)
    }
}

方法的选择取决于您是否预计用户需要测试特定错误以及多个用户实现自己的错误处理的可能性。

以上是如何最好地处理 Go 中的错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn