Skip to content

Commit 8c431d3

Browse files
committed
调整代码
1 parent ca597a9 commit 8c431d3

13 files changed

Lines changed: 369 additions & 327 deletions

HISTORY.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
## ✒ 历史版本的特性介绍 (Features in old versions)
22

3+
### v0.4.0
4+
5+
> 此版本发布于 2023-06-18
6+
7+
* 去除 Code 函数
8+
* 调整代码结构
9+
* 调整 Msg 使用姿势
10+
311
### v0.3.0
412

513
> 此版本发布于 2023-06-18

README.en.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 🔧 Errors
1+
# 🧯 Errors
22

33
[![Go Doc](_icons/godoc.svg)](https://pkg.go.dev/github.com/FishGoddess/errors)
44
[![License](_icons/license.svg)](https://opensource.org/licenses/MIT)
@@ -61,9 +61,10 @@ func main() {
6161
// Use WithMsg to carry a message.
6262
err = errors.Wrap(io.EOF, codeTestError, errors.WithMsg("test"))
6363
fmt.Println(err.Error())
64-
fmt.Println(errors.Code(err))
6564
fmt.Println(errors.Msg(err))
65+
fmt.Println(errors.MsgOrDefault(io.EOF, "default error message"))
6666
}
67+
6768
```
6869

6970
### 👥 Contributing

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 🔧 Errors
1+
# 🧯 Errors
22

33
[![Go Doc](_icons/godoc.svg)](https://pkg.go.dev/github.com/FishGoddess/errors)
44
[![License](_icons/license.svg)](https://opensource.org/licenses/MIT)
@@ -61,9 +61,10 @@ func main() {
6161
// Use WithMsg to carry a message.
6262
err = errors.Wrap(io.EOF, codeTestError, errors.WithMsg("test"))
6363
fmt.Println(err.Error())
64-
fmt.Println(errors.Code(err))
6564
fmt.Println(errors.Msg(err))
65+
fmt.Println(errors.MsgOrDefault(io.EOF, "default error message"))
6666
}
67+
6768
```
6869

6970
### 👥 贡献者

_examples/basic.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,6 @@ func main() {
4747
// Use WithMsg to carry a message.
4848
err = errors.Wrap(io.EOF, codeTestError, errors.WithMsg("test"))
4949
fmt.Println(err.Error())
50-
fmt.Println(errors.Code(err))
5150
fmt.Println(errors.Msg(err))
51+
fmt.Println(errors.MsgOrDefault(io.EOF, "default error message"))
5252
}

_icons/coverage.svg

Lines changed: 2 additions & 2 deletions
Loading

errors.go

Lines changed: 7 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2022 FishGoddess. All rights reserved.
1+
// Copyright 2023 FishGoddess. All rights reserved.
22
// Use of this source code is governed by a MIT style
33
// license that can be found in the LICENSE file.
44

@@ -9,140 +9,12 @@ import (
99
"fmt"
1010
)
1111

12-
const (
13-
codeNil = 0
14-
codeUnknown = 1
15-
)
16-
17-
const (
18-
nilString = "<nil>"
19-
)
20-
21-
var (
22-
// FormatError formats e and returns a string in Error().
23-
FormatError = func(e *Error) string {
24-
return e.err.Error()
25-
}
26-
27-
// FormatString formats e and returns a string in String().
28-
FormatString = func(e *Error) string {
29-
return fmt.Sprintf("%d (%s)", e.code, e.msg)
30-
}
31-
)
32-
33-
// Error wraps err with some information.
34-
type Error struct {
35-
err error
36-
37-
code int32
38-
msg string
39-
}
40-
41-
func (e *Error) Error() string {
42-
if e == nil || e.err == nil {
43-
return nilString
44-
}
45-
46-
return FormatError(e)
47-
}
48-
49-
func (e *Error) String() string {
50-
if e == nil || e.err == nil {
51-
return nilString
52-
}
53-
54-
return FormatString(e)
55-
}
56-
57-
// Is returns if e has the same type of target.
58-
func (e *Error) Is(target error) bool {
59-
if e == nil {
60-
return e == target
61-
}
62-
63-
err, ok := target.(*Error)
64-
if !ok {
65-
return e.err == target
66-
}
67-
68-
return e.code == err.code
69-
}
70-
71-
// Unwrap returns err inside.
72-
func (e *Error) Unwrap() error {
73-
if e == nil {
74-
return nil
75-
}
76-
77-
return e.err
78-
}
79-
80-
// Wrap wraps err with code
81-
func Wrap(err error, code int32, opts ...Option) error {
82-
if err == nil {
83-
return nil
84-
}
85-
86-
e := &Error{
87-
err: err,
88-
code: code,
89-
msg: err.Error(),
90-
}
91-
92-
applyOptions(e, opts)
93-
return e
12+
// New returns a string error.
13+
func New(text string) error {
14+
return errors.New(text)
9415
}
9516

96-
// Unwrap returns if err is Error and its code == code, and the original error will be returned, too.
97-
func Unwrap(err error, code int32) (error, bool) {
98-
for {
99-
if err == nil {
100-
return nil, false
101-
}
102-
103-
e, ok := err.(*Error)
104-
if !ok {
105-
return err, false
106-
}
107-
108-
if e.code == code {
109-
return err, true
110-
}
111-
112-
err = errors.Unwrap(err)
113-
}
114-
}
115-
116-
// Is returns if err is Error and its code == code.
117-
func Is(err error, code int32) bool {
118-
_, ok := Unwrap(err, code)
119-
return ok
120-
}
121-
122-
// Code returns the code of err.
123-
func Code(err error) int32 {
124-
if err == nil {
125-
return codeNil
126-
}
127-
128-
e, ok := err.(*Error)
129-
if !ok {
130-
return codeUnknown
131-
}
132-
133-
return e.code
134-
}
135-
136-
// Msg returns the msg of err.
137-
func Msg(err error) string {
138-
if err == nil {
139-
return nilString
140-
}
141-
142-
e, ok := err.(*Error)
143-
if !ok {
144-
return err.Error()
145-
}
146-
147-
return e.msg
17+
// NewF returns a string error.
18+
func NewF(text string, params ...interface{}) error {
19+
return fmt.Errorf(text, params...)
14820
}

errors_test.go

Lines changed: 11 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,25 @@
1-
// Copyright 2022 FishGoddess. All rights reserved.
1+
// Copyright 2023 FishGoddess. All rights reserved.
22
// Use of this source code is governed by a MIT style
33
// license that can be found in the LICENSE file.
44

55
package errors
66

77
import (
8-
"errors"
9-
"io"
108
"testing"
119
)
1210

13-
// go test -v -cover -run=^TestError$
14-
func TestError(t *testing.T) {
15-
code := int32(500)
16-
17-
err := Wrap(nil, code)
18-
if err != nil {
19-
t.Errorf("err %+v is wrong", err)
20-
}
21-
22-
err = Wrap(errors.New("500"), code)
23-
if e, ok := Unwrap(err, code); !ok || e.Error() != "500" {
24-
t.Errorf("err %+v is wrong", err)
25-
}
26-
}
27-
28-
// go test -v -cover -run=^TestCode$
29-
func TestCode(t *testing.T) {
30-
code := int32(500)
31-
32-
got := Code(nil)
33-
if got != codeNil {
34-
t.Errorf("got %d is wrong", got)
35-
}
36-
37-
got = Code(Wrap(nil, code))
38-
if got != codeNil {
39-
t.Errorf("got %d is wrong", got)
40-
}
41-
42-
got = Code(io.EOF)
43-
if got != codeUnknown {
44-
t.Errorf("got %d is wrong", got)
45-
}
46-
47-
got = Code(Wrap(errors.New("500"), code))
48-
if got != code {
49-
t.Errorf("got %d is wrong", got)
11+
// go test -v -cover -run=^TestNew$
12+
func TestNew(t *testing.T) {
13+
err := New("test")
14+
if err.Error() != "test" {
15+
t.Errorf("err.Error() %s != 'test'", err.Error())
5016
}
5117
}
5218

53-
// go test -v -cover -run=^TestMsg$
54-
func TestMsg(t *testing.T) {
55-
code := int32(500)
56-
57-
msg := Msg(Wrap(nil, code))
58-
if msg != nilString {
59-
t.Errorf("msg %s is wrong", msg)
60-
}
61-
62-
msg = Msg(Wrap(errors.New("500"), code))
63-
if msg != "500" {
64-
t.Errorf("msg %s is wrong", msg)
65-
}
66-
67-
msg = Msg(Wrap(errors.New("500"), code, WithMsg("internal")))
68-
if msg != "internal" {
69-
t.Errorf("msg %s is wrong", msg)
19+
// go test -v -cover -run=^TestNewF$
20+
func TestNewF(t *testing.T) {
21+
err := NewF("test %d %.2f", 123, 3.14)
22+
if err.Error() != "test 123 3.14" {
23+
t.Errorf("err.Error() %s != 'test 123 3.14'", err.Error())
7024
}
7125
}

extension.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright 2023 FishGoddess. All rights reserved.
2+
// Use of this source code is governed by a MIT style
3+
// license that can be found in the LICENSE file.
4+
5+
package errors
6+
7+
const (
8+
codeTimeout = 1000
9+
codeNetworkError = 1100
10+
codeDBError = 1200
11+
)
12+
13+
// Timeout returns a timeout error.
14+
func Timeout(err error, opts ...Option) error {
15+
return Wrap(err, codeTimeout, opts...)
16+
}
17+
18+
// IsTimeout if err is timeout.
19+
func IsTimeout(err error) bool {
20+
return Is(err, codeTimeout)
21+
}
22+
23+
// UnwrapTimeout if err is timeout.
24+
func UnwrapTimeout(err error) (error, bool) {
25+
return Unwrap(err, codeTimeout)
26+
}
27+
28+
// NetworkError returns a network error.
29+
func NetworkError(err error, opts ...Option) error {
30+
return Wrap(err, codeNetworkError, opts...)
31+
}
32+
33+
// IsNetworkError if err is network error.
34+
func IsNetworkError(err error) bool {
35+
return Is(err, codeNetworkError)
36+
}
37+
38+
// UnwrapNetworkError if err is network error.
39+
func UnwrapNetworkError(err error) (error, bool) {
40+
return Unwrap(err, codeNetworkError)
41+
}
42+
43+
// DBError returns a db error.
44+
func DBError(err error, opts ...Option) error {
45+
return Wrap(err, codeDBError, opts...)
46+
}
47+
48+
// IsDBError if err is db error.
49+
func IsDBError(err error) bool {
50+
return Is(err, codeDBError)
51+
}
52+
53+
// UnwrapDBError if err is db error.
54+
func UnwrapDBError(err error) (error, bool) {
55+
return Unwrap(err, codeDBError)
56+
}

0 commit comments

Comments
 (0)