yjp 3 rokov pred
rodič
commit
62bb9fa3e9
2 zmenil súbory, kde vykonal 51 pridanie a 18 odobranie
  1. 33 13
      errors.go
  2. 18 5
      errors_test.go

+ 33 - 13
errors.go

@@ -1,8 +1,9 @@
 package fserr
 
 import (
+	"errors"
 	"fmt"
-	"github.com/pkg/errors"
+	pkgerrors "github.com/pkg/errors"
 )
 
 const (
@@ -35,9 +36,9 @@ func ExplainCode(code uint32) string {
 }
 
 func TransferFromError(err error) *Error {
-	transferedErr, ok := err.(*Error)
+	transferErr, ok := err.(*Error)
 	if ok {
-		return transferedErr
+		return transferErr
 	}
 
 	return &Error{
@@ -46,36 +47,37 @@ func TransferFromError(err error) *Error {
 	}
 }
 
-func NewUnknownError(message string) error {
+func NewUnknownError(message string) *Error {
 	return newError(ErrUnknownCode, message)
 }
 
-func NewParamError(message string) error {
+func NewParamError(message string) *Error {
 	return newError(ErrParamCode, message)
 }
 
-func NewConflictError(message string) error {
+func NewConflictError(message string) *Error {
 	return newError(ErrConflictCode, message)
 }
 
-func NewNotExistError(message string) error {
+func NewNotExistError(message string) *Error {
 	return newError(ErrNotExistCode, message)
 }
 
-func NewTypeTransferError(message string) error {
+func NewTypeTransferError(message string) *Error {
 	return newError(ErrTypeTransferCode, message)
 }
 
-func NewAuthError(message string) error {
+func NewAuthError(message string) *Error {
 	return newError(ErrAuthCode, message)
 }
 
-func NewCustomError(message string) error {
+func NewCustomError(message string) *Error {
 	return newError(ErrCustomCode, message)
 }
 
 type Error struct {
-	code uint32
+	code    uint32
+	message string
 	error
 }
 
@@ -88,9 +90,27 @@ func (err *Error) Error() string {
 	return errMsg
 }
 
+func (err *Error) WithStack() error {
+	return &Error{
+		code:    err.code,
+		message: err.message,
+		error:   pkgerrors.New(err.message),
+	}
+}
+
+func (err *Error) Is(target error) bool {
+	transferErr, ok := target.(*Error)
+	if !ok {
+		return false
+	}
+
+	return err.message == transferErr.message && err.code == transferErr.code
+}
+
 func newError(code uint32, message string) *Error {
 	return &Error{
-		code:  code,
-		error: errors.New(message),
+		code:    code,
+		message: message,
+		error:   errors.New(message),
 	}
 }

+ 18 - 5
errors_test.go

@@ -9,12 +9,12 @@ import (
 var testErr = newError(ErrUnknownCode, "测试错误")
 
 func TestErrors(t *testing.T) {
-	err := testErr
-	fmt.Println("测试错误打印:", err)
+	fmt.Println("测试错误打印:", testErr)
 
-	if err != testErr {
-		t.Fatal("错误不同")
-	}
+	Func1()
+
+	err := testErr.WithStack()
+	fmt.Println("测试WithStack错误打印:", err)
 
 	isRight := errors.Is(err, testErr)
 	if !isRight {
@@ -37,3 +37,16 @@ func TestErrors(t *testing.T) {
 		t.Fatal("目标错误和原始错误不一致")
 	}
 }
+
+func Func1() {
+	Func2()
+}
+
+func Func2() {
+	Func3()
+}
+
+func Func3() {
+	err := testErr.WithStack()
+	fmt.Println("测试Func3错误打印:", err)
+}