☠️

错误处理

日常使用

建议错误码统一放置在一个文件内
import "github.com/sohaha/zlsgo/zerror" // 创建错误对象,包含错误码与堆栈信息 err := zerror.New(500, "这是一个系统错误") // 包裹错误 err2 := zerror.Wrap(err, 999, "系统繁忙") // 判断是否含有 500 错误码 is500 := zerror.Is(err2, zerror.ErrCode(500)) // 当前错误码 zerror.UnwrapCode(err2) // 全部错误码 zerror.UnwrapCodes(err2) // 解包裹信息 zerror.Unwrap(err2, zerror.ErrCode(500)) // 如果 err 不带堆栈 则包裹成 zerror err = zerror.Reuse(err)
 

打印堆栈信息

// 方式一 zlog.Stack(err) // 方式二 fmt.Println("%+v", err)
 

示例

package main import ( "github.com/sohaha/zlsgo/zerror" "github.com/sohaha/zlsgo/zlog" ) func main() { err := newErr() err = wrap500Err(err) err = wrap999Err(err) zlog.Stack(err) } func newErr() error { e := func() error { return zerror.New(400, "The is 400") } return e() } func wrap500Err(err error) error { return zerror.Wrap(err, 500, "Wrap 500 Error") } func wrap999Err(err error) error { return zerror.Wrap(err, 999, "Unknown Error") }
notion image
 

异常处理

err := zerror.TryCatch(func() error { zerror.Panic(zerror.New(500, "测试")) return nil }) // 如果 TryCatch 内返回了 error 或触发了 panic if err != nil{ // .. }