跳转至

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 可以对 StackWrap 方法返回的错误对象进行解包,返回其内部的原始错误对象。

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)