Error¶
众所周知,Go 语言中没有异常,只有错误,这个设计曾经掀起广泛的争论,但今天我们不会谈论这个,只是想介绍 auxo 中的 errors
包对错误处理的一些简化操作。
首先,auxo 中的 errors
包也提供了一个 New
方法用于创建一个普通的 error
对象,这使得其可以完全代替标准库中对应的 errors
包。
Format¶
Format
等同于 fmt
包的 Errorf 方法,参数也一样。
err := errors.Format("invalid name '%s' for user", name)
Stack¶
Stack
方法用于创建一个带堆栈的错误。
stackErr := errors.Stack(err)
fmt.Println(stackErr)
Wrap¶
Wrap
方法用于创建一个重新包装后的错误。
wrappedErr := errors.Wrap(err, "open db '%s' failed", db)
Convert¶
Convert
方法用于转换一个 interface{}
对象为错误对象,如果对象已经是一个 error
对象,则返回此对象,否则用 fmt.Errorf
创建一个新错误对象。
defer func() {
if e := recover(); e != nil {
err := errors.Convert(e)
}
}()
Cause¶
Cause
可以对 Stack
或 Wrap
方法返回的错误对象进行解包,返回其内部的原始错误对象。
err := errors.Wrap(errors.New("test"), "wrap")
rawErr := errors.Cause(err)
Coded¶
Coded
创建一个带编码的 error
对象,你还可以同时设置附加的详细信息。
err := errors.Coded(404, "Not Found", "Can't find the page '/users'")
List¶
List
可以把多个 error
对象转换成单一的 error
对象。
err := errors.List(err1, err2, err3)