u
This commit is contained in:
1 parent
be8eaae7c5
commit
d6dd5b032d
11 files changed
+202
-112
No files matched your search
@@ -1,13 +1,11 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"base-go-v2/internal/errs"
|
||||
"base-go-v2/internal/utils/mapx"
|
||||
"base-go-v2/internal/utils/validate"
|
||||
"encoding/json"
|
||||
"sync"
|
||||
|
||||
"github.com/valyala/fasthttp"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// BodyCache 缓存 fasthttp 请求体
|
||||
@@ -167,23 +165,23 @@ func (c *Context) AddError(err error) error {
|
||||
}
|
||||
|
||||
if _, exists := c.keys["errors"]; !exists {
|
||||
c.keys["errors"] = []*errs.StackError{}
|
||||
c.keys["errors"] = []*StackError{}
|
||||
}
|
||||
|
||||
// 统一生成堆栈
|
||||
se := errs.WrapWithStack(err)
|
||||
c.keys["errors"] = append(c.keys["errors"].([]*errs.StackError), se)
|
||||
se := WrapWithStack(err)
|
||||
c.keys["errors"] = append(c.keys["errors"].([]*StackError), se)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// Errors 返回 []*utils.StackError
|
||||
func (c *Context) Errors() []*errs.StackError {
|
||||
func (c *Context) Errors() []*StackError {
|
||||
if c.keys == nil {
|
||||
return nil
|
||||
}
|
||||
if err, exists := c.keys["errors"]; exists {
|
||||
return err.([]*errs.StackError)
|
||||
if errs, exists := c.keys["errors"]; exists {
|
||||
return errs.([]*StackError)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"runtime/debug"
|
||||
)
|
||||
|
||||
// StackError 保存原始错误和堆栈
|
||||
type StackError struct {
|
||||
err error
|
||||
stack string
|
||||
}
|
||||
|
||||
// 实现 error 接口
|
||||
func (s *StackError) Error() string {
|
||||
if s.err == nil {
|
||||
return ""
|
||||
}
|
||||
return s.err.Error()
|
||||
}
|
||||
|
||||
// StackTrace 返回堆栈信息
|
||||
func (s *StackError) StackTrace() string {
|
||||
return s.stack
|
||||
}
|
||||
|
||||
// WrapWithStack 给错误附加堆栈,如果已经是 StackError 则直接返回
|
||||
func WrapWithStack(err error) *StackError {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var se *StackError
|
||||
if errors.As(err, &se) {
|
||||
return se
|
||||
}
|
||||
|
||||
return &StackError{
|
||||
err: err,
|
||||
stack: string(debug.Stack()),
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user