Documentation ¶
Overview ¶
Package errorKit
极客时间的"Go error处理最佳实践": https://u.geekbang.org/lesson/376?article=513711
输出带有堆栈的error时,建议使用: logrusKit.PrintError 或 logrusKit.PrintErrorWithLogger.
使用时的注意点: (a) 在应用代码(业务代码)中,使用 errorKit.New 返回错误; (b) 在项目工程里面,如果调用其它包内的函数,通常简单的直接返回error,即向上抛; (c) 如果和其它库(第三方库、标准库)进行协作,考虑使用 errorKit.Wrap 保存堆栈信息; (d) 不要到处打日志(比如每个错误产生的地方),直接往上抛的情况不需要打日志; (e) 在 程序的顶部 或 工作的goroutine顶部(请求入口),使用 %+v 输出堆栈详情. (f) 使用 errorKit.Cause 获取root error,再和sentinel error判定. (g) 如果你的函数不打算处理这个错误,你没法处理,那么应该携带上足够多的上下文,然后往上抛;(Wrap errors) (h) 如果错误被处理了,那么它就不应该被往上抛并且记日志,
如果是 第三方库 或 基础库(被很多人使用并且是跨很多项目的), (a) 应该返回 root error,它的原始错误是什么就是什么; (b) 如果返回的新的error,应该使用 errorKit.Simple 来创建error; (c) errorKit.New、errorKit.Wrap 和 errorKit.WithMessage: 业务代码可以使用,第三方库和基础库不应该使用(以避免保存多次堆栈信息,太冗余了);
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // New 用于创建一个自定义错误信息的error对象,并包含堆栈信息。 New func(text string) error = gerror.New Newf func(format string, args ...interface{}) error = gerror.Newf // Wrap 用于包裹其他错误error对象,构造成多级的错误信息,包含堆栈信息。 Wrap func(err error, text string) error = gerror.Wrap Wrapf func(err error, format string, args ...interface{}) error = gerror.Wrapf // NewSkip 用于创建一个自定义错误信息的error对象,并且忽略部分堆栈信息(按照当前调用方法位置往上忽略)。高级功能,一般开发者很少用得到。 /* @param skip (1) >=0 (2) 0: 等价于 New || Newf (2) 1: 跳过1层(e.g. assert工具类) */ NewSkip func(skip int, text string) error = gerror.NewSkip NewSkipf func(skip int, format string, args ...interface{}) error = gerror.NewSkipf )
var ( // Equal 错误比较 Equal func(err, target error) bool = gerror.Equal // HasStack 判断错误是否带堆栈 HasStack func(err error) bool = gerror.HasStack // Stack 获取堆栈信息 Stack func(err error) string = gerror.Stack // Current 获取当前error Current func(err error) error = gerror.Current // Unwrap 获取层级错误的下一级错误error接口对象(当下一层级不存在时,返回nil) Unwrap func(err error) error = gerror.Unwrap // Cause 获取根错误error Cause func(err error) error = gerror.Cause )
Functions ¶
This section is empty.
Types ¶
This section is empty.