From c8a88914f925b8d3b6776aa72aa40d8fb92e8e1b Mon Sep 17 00:00:00 2001 From: zchh < zc123zhangchi@gmail.com> Date: Fri, 8 Jan 2021 22:38:35 +0800 Subject: [PATCH 1/5] error module design --- core/codes/codes.go | 11 +++++++++++ core/error/error.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 core/codes/codes.go create mode 100644 core/error/error.go diff --git a/core/codes/codes.go b/core/codes/codes.go new file mode 100644 index 00000000..9be5bb9c --- /dev/null +++ b/core/codes/codes.go @@ -0,0 +1,11 @@ +package codes + +type Code uint32 + +const ( + SessionSessionStartError Code = 5001001 +) + +var strToCode = map[string]Code{ + `"SESSION_MODULE_SESSION_START_ERROR"`: SessionSessionStartError, +} diff --git a/core/error/error.go b/core/error/error.go new file mode 100644 index 00000000..9e257313 --- /dev/null +++ b/core/error/error.go @@ -0,0 +1,44 @@ +package error + +import "fmt" +import "github.com/beego/beego/v2/core/codes" + +type Code int32 + +type Error struct { + Code Code + Msg string +} + +// New returns a Error representing c and msg. +func New(c Code, msg string) *Error { + return &Error{Code: c, Msg: msg} +} + +// Err returns an error representing c and msg. If c is OK, returns nil. +func Err(c codes.Code, msg string) error { + return New(c, msg) +} + +// Errorf returns Error(c, fmt.Sprintf(format, a...)). +func Errorf(c codes.Code, format string, a ...interface{}) error { + return Err(c, fmt.Sprintf(format, a...)) +} + +func (e *Error) Error() string { + return fmt.Sprintf("beego error: code = %s desc = %s", e.GetCode(), e.GetMessage()) +} + +func (x *Error) GetCode() Code { + if x != nil { + return x.Code + } + return 0 +} + +func (x *Error) GetMessage() string { + if x != nil { + return x.Msg + } + return "" +} \ No newline at end of file From 958f77ab901f9f6274ed2371fa78db8572a54a8f Mon Sep 17 00:00:00 2001 From: zchh < zc123zhangchi@gmail.com> Date: Fri, 8 Jan 2021 23:20:03 +0800 Subject: [PATCH 2/5] error module design bug fix --- core/error/error.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/error/error.go b/core/error/error.go index 9e257313..f7b3b54d 100644 --- a/core/error/error.go +++ b/core/error/error.go @@ -1,17 +1,17 @@ package error -import "fmt" -import "github.com/beego/beego/v2/core/codes" - -type Code int32 +import ( + "fmt" + "github.com/beego/beego/v2/core/codes" +) type Error struct { - Code Code + Code codes.Code Msg string } // New returns a Error representing c and msg. -func New(c Code, msg string) *Error { +func New(c codes.Code, msg string) *Error { return &Error{Code: c, Msg: msg} } @@ -29,7 +29,7 @@ func (e *Error) Error() string { return fmt.Sprintf("beego error: code = %s desc = %s", e.GetCode(), e.GetMessage()) } -func (x *Error) GetCode() Code { +func (x *Error) GetCode() codes.Code { if x != nil { return x.Code } From 424817e9a170696094e3e52cb1ae931a427c410e Mon Sep 17 00:00:00 2001 From: zchh < zc123zhangchi@gmail.com> Date: Fri, 8 Jan 2021 23:39:46 +0800 Subject: [PATCH 3/5] fix bug --- core/error/error.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/error/error.go b/core/error/error.go index f7b3b54d..1f5506a5 100644 --- a/core/error/error.go +++ b/core/error/error.go @@ -3,6 +3,7 @@ package error import ( "fmt" "github.com/beego/beego/v2/core/codes" + "strconv" ) type Error struct { @@ -26,7 +27,8 @@ func Errorf(c codes.Code, format string, a ...interface{}) error { } func (e *Error) Error() string { - return fmt.Sprintf("beego error: code = %s desc = %s", e.GetCode(), e.GetMessage()) + codeSrt := strconv.FormatUint(uint64(e.GetCode()), 10) + return fmt.Sprintf("beego error: code = %s desc = %s", codeSrt, e.GetMessage()) } func (x *Error) GetCode() codes.Code { From d47a95df8d40218009962240cc8193e399935450 Mon Sep 17 00:00:00 2001 From: zchh < zc123zhangchi@gmail.com> Date: Sun, 17 Jan 2021 22:42:49 +0800 Subject: [PATCH 4/5] =?UTF-8?q?error=E6=A8=A1=E5=9D=97=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/codes/codes.go | 4 +- core/error/error.go | 18 +++-- core/error/error_test.go | 151 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 165 insertions(+), 8 deletions(-) create mode 100644 core/error/error_test.go diff --git a/core/codes/codes.go b/core/codes/codes.go index 9be5bb9c..7938fea7 100644 --- a/core/codes/codes.go +++ b/core/codes/codes.go @@ -6,6 +6,6 @@ const ( SessionSessionStartError Code = 5001001 ) -var strToCode = map[string]Code{ - `"SESSION_MODULE_SESSION_START_ERROR"`: SessionSessionStartError, +var CodeToStr = map[Code]string{ + SessionSessionStartError : `"SESSION_MODULE_SESSION_START_ERROR"`, } diff --git a/core/error/error.go b/core/error/error.go index 1f5506a5..50cce244 100644 --- a/core/error/error.go +++ b/core/error/error.go @@ -6,6 +6,9 @@ import ( "strconv" ) +// The `Error`type defines custom error for Beego. It is used by every module +// in Beego. Each `Error` message contains three pieces of data: error code, +// error message. More docs http://beego.me/docs/module/error.md type Error struct { Code codes.Code Msg string @@ -26,21 +29,24 @@ func Errorf(c codes.Code, format string, a ...interface{}) error { return Err(c, fmt.Sprintf(format, a...)) } +// Error returns formatted message for user. func (e *Error) Error() string { codeSrt := strconv.FormatUint(uint64(e.GetCode()), 10) return fmt.Sprintf("beego error: code = %s desc = %s", codeSrt, e.GetMessage()) } -func (x *Error) GetCode() codes.Code { - if x != nil { - return x.Code +// GetCode returns Error's Code +func (e *Error) GetCode() codes.Code { + if e != nil { + return e.Code } return 0 } -func (x *Error) GetMessage() string { - if x != nil { - return x.Msg +// GetMessage returns Error's Msg. +func (e *Error) GetMessage() string { + if e != nil { + return e.Msg } return "" } \ No newline at end of file diff --git a/core/error/error_test.go b/core/error/error_test.go new file mode 100644 index 00000000..30b61164 --- /dev/null +++ b/core/error/error_test.go @@ -0,0 +1,151 @@ +package error + +import ( + "github.com/beego/beego/v2/core/codes" + "reflect" + "testing" +) + +func TestErr(t *testing.T) { + type args struct { + c codes.Code + msg string + } + tests := []struct { + name string + args args + wantErr bool + }{ + // TODO: Add test cases. + {name: "1", args: args{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, wantErr: true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := Err(tt.args.c, tt.args.msg); (err != nil) != tt.wantErr { + t.Errorf("Err() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestError_Error(t *testing.T) { + type fields struct { + Code codes.Code + Msg string + } + tests := []struct { + name string + fields fields + want string + }{ + // TODO: Add test cases. + {name: "1", fields: fields{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, want: "beego error: code = 5001001 desc = \"SESSION_MODULE_SESSION_START_ERROR\""}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + e := &Error{ + Code: tt.fields.Code, + Msg: tt.fields.Msg, + } + if got := e.Error(); got != tt.want { + t.Errorf("Error() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestError_GetCode(t *testing.T) { + type fields struct { + Code codes.Code + Msg string + } + tests := []struct { + name string + fields fields + want codes.Code + }{ + // TODO: Add test cases. + {name: "1", fields: fields{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, want: codes.SessionSessionStartError}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + e := &Error{ + Code: tt.fields.Code, + Msg: tt.fields.Msg, + } + if got := e.GetCode(); got != tt.want { + t.Errorf("GetCode() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestError_GetMessage(t *testing.T) { + type fields struct { + Code codes.Code + Msg string + } + tests := []struct { + name string + fields fields + want string + }{ + // TODO: Add test cases. + {name: "1", fields: fields{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, want: codes.CodeToStr[codes.SessionSessionStartError]}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + e := &Error{ + Code: tt.fields.Code, + Msg: tt.fields.Msg, + } + if got := e.GetMessage(); got != tt.want { + t.Errorf("GetMessage() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestErrorf(t *testing.T) { + type args struct { + c codes.Code + format string + a []interface{} + } + tests := []struct { + name string + args args + wantErr bool + }{ + // TODO: Add test cases. + {name: "1", args: args{codes.SessionSessionStartError, "%s", []interface{}{codes.CodeToStr[codes.SessionSessionStartError]}}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := Errorf(tt.args.c, tt.args.format, tt.args.a...); (err != nil) != tt.wantErr { + t.Errorf("Errorf() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestNew(t *testing.T) { + type args struct { + c codes.Code + msg string + } + tests := []struct { + name string + args args + want *Error + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := New(tt.args.c, tt.args.msg); !reflect.DeepEqual(got, tt.want) { + t.Errorf("New() = %v, want %v", got, tt.want) + } + }) + } +} From 17d6795921c70b1e2707f5e7793a835d73800b47 Mon Sep 17 00:00:00 2001 From: zchh < zc123zhangchi@gmail.com> Date: Mon, 18 Jan 2021 19:56:07 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/codes/codes.go | 5 ++++- core/error/error.go | 7 ++++--- core/error/error_test.go | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/core/codes/codes.go b/core/codes/codes.go index 7938fea7..77f59220 100644 --- a/core/codes/codes.go +++ b/core/codes/codes.go @@ -1,11 +1,14 @@ package codes +// A Code is an unsigned 32-bit error code as defined in the beego spec. type Code uint32 const ( + // SessionSessionStartError means func SessionStart error in session module. SessionSessionStartError Code = 5001001 ) +// CodeToStr is a map about Code and Code's message var CodeToStr = map[Code]string{ SessionSessionStartError : `"SESSION_MODULE_SESSION_START_ERROR"`, -} +} \ No newline at end of file diff --git a/core/error/error.go b/core/error/error.go index 50cce244..6caf9839 100644 --- a/core/error/error.go +++ b/core/error/error.go @@ -6,9 +6,10 @@ import ( "strconv" ) -// The `Error`type defines custom error for Beego. It is used by every module +// Error type defines custom error for Beego. It is used by every module // in Beego. Each `Error` message contains three pieces of data: error code, -// error message. More docs http://beego.me/docs/module/error.md +// error message. +// More docs http://beego.me/docs/module/error.md. type Error struct { Code codes.Code Msg string @@ -35,7 +36,7 @@ func (e *Error) Error() string { return fmt.Sprintf("beego error: code = %s desc = %s", codeSrt, e.GetMessage()) } -// GetCode returns Error's Code +// GetCode returns Error's Code. func (e *Error) GetCode() codes.Code { if e != nil { return e.Code diff --git a/core/error/error_test.go b/core/error/error_test.go index 30b61164..630b277c 100644 --- a/core/error/error_test.go +++ b/core/error/error_test.go @@ -118,7 +118,7 @@ func TestErrorf(t *testing.T) { wantErr bool }{ // TODO: Add test cases. - {name: "1", args: args{codes.SessionSessionStartError, "%s", []interface{}{codes.CodeToStr[codes.SessionSessionStartError]}}}, + {name: "1", args: args{codes.SessionSessionStartError, "%s", []interface{}{codes.CodeToStr[codes.SessionSessionStartError]}}, wantErr: true}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -140,6 +140,7 @@ func TestNew(t *testing.T) { want *Error }{ // TODO: Add test cases. + {name: "1", args: args{codes.SessionSessionStartError, codes.CodeToStr[codes.SessionSessionStartError]}, want: &Error{Code:codes.SessionSessionStartError, Msg:codes.CodeToStr[codes.SessionSessionStartError]}}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {