Compare commits
8 Commits
be3556e23e
...
master
Author | SHA1 | Date | |
---|---|---|---|
a0d52fc093 | |||
93bed37b9c | |||
4eb74a4e3a | |||
1718c9c8ad | |||
255d79affb | |||
ca151fbc1f | |||
907c206627 | |||
1e7f84ed84 |
@ -20,9 +20,11 @@ type IException interface {
|
||||
// Message 获取错误信息
|
||||
Message() string
|
||||
// Data 获取异常时的返回数据
|
||||
Data() map[string]any
|
||||
Data() any
|
||||
// ToError 转换为内置error类型
|
||||
ToError() error
|
||||
// IsCode 是否为指定code
|
||||
IsCode(code any) bool
|
||||
// GetStack 获取调用堆栈
|
||||
GetStack() string
|
||||
}
|
||||
|
2
code.go
2
code.go
@ -82,7 +82,7 @@ var (
|
||||
// messageWithCode 自动在message文案后追加状态码
|
||||
messageWithCode = true
|
||||
// defaultSuccessCode 默认代表成功的状态码
|
||||
defaultSuccessCode any
|
||||
defaultSuccessCode any = 0
|
||||
// defaultLanguage 默认的语言
|
||||
defaultLanguage = "zh"
|
||||
)
|
||||
|
44
exception.go
44
exception.go
@ -8,8 +8,12 @@
|
||||
package exception
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Exception 异常接口的具体实现
|
||||
@ -20,11 +24,22 @@ import (
|
||||
type Exception struct {
|
||||
code any
|
||||
message string
|
||||
data map[string]any
|
||||
data any
|
||||
stack string
|
||||
}
|
||||
|
||||
func (e *Exception) Error() string {
|
||||
return e.Message()
|
||||
mapData := map[string]any{
|
||||
"code": e.Code(),
|
||||
"msg": e.Message(),
|
||||
"data": e.Data(),
|
||||
}
|
||||
byteData, _ := json.Marshal(mapData)
|
||||
return string(byteData)
|
||||
}
|
||||
|
||||
func (e *Exception) GetStack() string {
|
||||
return e.stack
|
||||
}
|
||||
|
||||
func (e *Exception) Code() any {
|
||||
@ -35,7 +50,7 @@ func (e *Exception) Message() string {
|
||||
return e.message
|
||||
}
|
||||
|
||||
func (e *Exception) Data() map[string]any {
|
||||
func (e *Exception) Data() any {
|
||||
return e.data
|
||||
}
|
||||
|
||||
@ -78,15 +93,34 @@ func NewWithCodeAndData(code any, data map[string]any) IException {
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 21:28 2022/6/25
|
||||
func New(code any, data map[string]any, defaultMessage ...string) IException {
|
||||
func New(code any, data any, defaultMessage ...string) IException {
|
||||
if nil == data {
|
||||
// 保证数据结构的一致性, 同时避免后续使用出现空指针
|
||||
data = map[string]any{}
|
||||
}
|
||||
pcs := make([]uintptr, 128)
|
||||
n := runtime.Callers(2, pcs)
|
||||
frames := runtime.CallersFrames(pcs[:n])
|
||||
var sb strings.Builder
|
||||
for {
|
||||
frame, more := frames.Next()
|
||||
sb.WriteString(frame.Function)
|
||||
sb.WriteByte('\n')
|
||||
sb.WriteByte('\t')
|
||||
sb.WriteString(frame.File)
|
||||
sb.WriteByte(':')
|
||||
sb.WriteString(strconv.Itoa(frame.Line))
|
||||
sb.WriteByte('\n')
|
||||
|
||||
if !more {
|
||||
break
|
||||
}
|
||||
}
|
||||
return &Exception{
|
||||
code: code,
|
||||
message: GetMessage(code, defaultMessage...),
|
||||
data: data,
|
||||
stack: sb.String(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,6 +164,6 @@ func IsSuccess(e *Exception) bool {
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 22:35 2022/6/25
|
||||
func NewSuccess(data map[string]any) IException {
|
||||
func NewSuccess(data any) IException {
|
||||
return New(defaultSuccessCode, data, "")
|
||||
}
|
||||
|
Reference in New Issue
Block a user