Golang中的错误处理函数
在这篇文章中,我将演示Go中处理错误函数的基础知识以及如何使用它们。
什么是错误类型?
Go中的错误类型是一种接口类型。
type error interface { Error() string}
所以基本上,错误类型是任何实现了Error() 方法的东西。
构建错误
有两种方法来创建一个错误值。
**error.New**职能**fmt.Errorf**观察者函数
func bar() error { return errors.New("error: an error occurred")}
每次调用这两个函数 ,都会返回一个不同的错误值,即使文本是相同的。
fmt.Println(bar()==bar()) # false
定义预期的错误
定义预期错误是Go中的一项重要技术,因为它可以帮助我们识别特定的错误,并以不同的方式处理它们。
下面是一个例子。
- 我们首先定义一个名为
ErrDivideByZero的哨兵错误。 - 然后我们定义了一个函数
Divide,当第二个参数为0时返回这个错误。 - 后来我们用
**errors.Is**来检查返回的错误是否是ErrDivideByZero,并做一些相应的操作。
包装错误
包装错误是指将一个错误值放在另一个错误值中,就像一个包装好的礼物。
当你想在遇到一个特定的错误时返回一个特定的错误信息时,这很有用。
下面是一个例子。
- 首先,当第二个参数为零时,
Divide函数返回一个ErrDivideByZero - 然后,
doDivide函数用一个自定义的错误信息包装了ErrDivideByZero错误,并返回一个 新的错误。 - 最后,在主函数中,我们使用
errors.Is函数来检查错误是否在其包装链内有ErrDivideByZero类型。
总结
这里有三点启示
- Go中的错误类型是一种接口类型。
- 预定义的错误将允许我们在以后检查哪个错误发生。
- 包裹错误为函数调用增加了上下文(类似于堆栈跟踪)。