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)