作者 唐旭辉

修改错误处理

@@ -4,11 +4,26 @@ import ( @@ -4,11 +4,26 @@ import (
4 "encoding/json" 4 "encoding/json"
5 ) 5 )
6 6
  7 +//CustomErrParse 解析自定义错误结构体
7 type CustomErrParse interface { 8 type CustomErrParse interface {
8 - ParseToMessage() interface{} 9 + ParseToMessage() *ResponseMessage
9 } 10 }
10 11
11 -//ErrorCode 统一错误编码结构 12 +//ErrorMap 统一消息错误编码
  13 +type ErrorMap map[int]string
  14 +
  15 +//Search 搜索错误描述
  16 +func (m ErrorMap) Search(code int) ErrorCode {
  17 + if v, ok := m[code]; ok {
  18 + return ErrorCode{
  19 + Errno: code,
  20 + Errmsg: v,
  21 + }
  22 + }
  23 + return ErrorCode{}
  24 +}
  25 +
  26 +//ErrorCode 统一错误结构
12 type ErrorCode struct { 27 type ErrorCode struct {
13 Errno int `json:"code"` 28 Errno int `json:"code"`
14 Errmsg string `json:"msg"` 29 Errmsg string `json:"msg"`
@@ -22,22 +37,27 @@ type ResponseMessage struct { @@ -22,22 +37,27 @@ type ResponseMessage struct {
22 37
23 func NewMesage(code int) *ResponseMessage { 38 func NewMesage(code int) *ResponseMessage {
24 return &ResponseMessage{ 39 return &ResponseMessage{
25 - ErrorCode: errmessge.Search(code), 40 + ErrorCode: SearchErr(code),
26 Data: nil, 41 Data: nil,
27 } 42 }
28 } 43 }
29 44
30 //ErrWithMessage 自定义错误结构 45 //ErrWithMessage 自定义错误结构
31 type ErrWithMessage struct { 46 type ErrWithMessage struct {
32 - Err error 47 + Err error `json:"-"`
33 ErrorCode 48 ErrorCode
34 } 49 }
35 50
  51 +var (
  52 + _ CustomErrParse = new(ErrWithMessage)
  53 + _ error = new(ErrWithMessage)
  54 +)
  55 +
36 //NewErrWithMessage 构建错误返回 56 //NewErrWithMessage 构建错误返回
37 //code:用于匹配统一消息错误编码 eRR:填充嵌套错误 57 //code:用于匹配统一消息错误编码 eRR:填充嵌套错误
38 func NewErrWithMessage(code int, eRR ...error) *ErrWithMessage { 58 func NewErrWithMessage(code int, eRR ...error) *ErrWithMessage {
39 r := &ErrWithMessage{ 59 r := &ErrWithMessage{
40 - ErrorCode: errmessge.Search(code), 60 + ErrorCode: SearchErr(code),
41 } 61 }
42 if len(eRR) > 0 { 62 if len(eRR) > 0 {
43 r.Err = eRR[0] 63 r.Err = eRR[0]
@@ -58,7 +78,7 @@ func (e ErrWithMessage) Unwrap() error { @@ -58,7 +78,7 @@ func (e ErrWithMessage) Unwrap() error {
58 } 78 }
59 79
60 //ParseToMessage 实现CustomErrParse的接口 80 //ParseToMessage 实现CustomErrParse的接口
61 -func (e ErrWithMessage) ParseToMessage() interface{} { 81 +func (e ErrWithMessage) ParseToMessage() *ResponseMessage {
62 return &ResponseMessage{ 82 return &ResponseMessage{
63 ErrorCode: e.ErrorCode, 83 ErrorCode: e.ErrorCode,
64 Data: nil, 84 Data: nil,
  1 +package protocol
  2 +
  3 +import (
  4 + "encoding/json"
  5 + "testing"
  6 +)
  7 +
  8 +func Test_Err(t *testing.T) {
  9 + errmsg := NewMesage(0)
  10 + bt1, _ := json.Marshal(errmsg)
  11 + t.Log(string(bt1))
  12 + normalmsg := NewErrWithMessage(0)
  13 + bt2, _ := json.Marshal(normalmsg)
  14 + t.Log(string(bt2))
  15 +}
1 package protocol 1 package protocol
2 2
3 -//ErrorMap 统一消息错误编码  
4 -type ErrorMap map[int]string  
5 -  
6 -//Search 搜索错误描述  
7 -func (m ErrorMap) Search(code int) ErrorCode {  
8 - if v, ok := m[code]; ok {  
9 - return ErrorCode{  
10 - Errno: code,  
11 - Errmsg: v,  
12 - }  
13 - }  
14 - return ErrorCode{}  
15 -}  
16 -  
17 var errmessge ErrorMap = map[int]string{ 3 var errmessge ErrorMap = map[int]string{
18 1: "系统异常", 4 1: "系统异常",
19 101: "clientId或clientSecret无效", 5 101: "clientId或clientSecret无效",
@@ -34,6 +20,23 @@ var errmessge ErrorMap = map[int]string{ @@ -34,6 +20,23 @@ var errmessge ErrorMap = map[int]string{
34 4142: "Uuid已存在,请求失败", 20 4142: "Uuid已存在,请求失败",
35 } 21 }
36 22
  23 +func SearchErr(code int) ErrorCode {
  24 + return errmessge.Search(code)
  25 +}
  26 +func ReturnResponse(data interface{}, eRR error) *ResponseMessage {
  27 + var msg *ResponseMessage
  28 + if eRR == nil {
  29 + msg = NewMesage(0)
  30 + msg.Data = data
  31 + return msg
  32 + }
  33 + // fmt.Println("日志:" + eRR.Error())
  34 + if x, ok := eRR.(CustomErrParse); ok {
  35 + return x.ParseToMessage()
  36 + }
  37 + return nil
  38 +}
  39 +
37 func InitMessageCode() { 40 func InitMessageCode() {
38 // messages := []struct { 41 // messages := []struct {
39 // Code int 42 // Code int