From 149f0d518970b0d904bd110b778f518fe82f236f Mon Sep 17 00:00:00 2001 From: lixizan Date: Sat, 26 Nov 2022 18:16:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0response=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- internal/server_test.go | 2 +- response.go | 21 ++++++++++++++------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 748935d..1058cac 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ var afterFunc = func(ctx context.Context, resp *http.Response) (context.Context, return ctx, err } var result = BaseResult{} - if err := jsoniter.Unmarshal(rc.Buffer.Bytes(), &result); err != nil { + if err := jsoniter.Unmarshal(rc.Bytes(), &result); err != nil { return ctx, err } if result.Code == nil || *result.Code != 0 { diff --git a/internal/server_test.go b/internal/server_test.go index f7b9052..49e4af8 100644 --- a/internal/server_test.go +++ b/internal/server_test.go @@ -35,7 +35,7 @@ var afterFunc = func(ctx context.Context, resp *http.Response) (context.Context, return ctx, err } var result = BaseResult{} - if err := jsoniter.Unmarshal(rc.Buffer.Bytes(), &result); err != nil { + if err := jsoniter.Unmarshal(rc.Bytes(), &result); err != nil { return ctx, err } if result.Code == nil || *result.Code != 0 { diff --git a/response.go b/response.go index 683985a..abe1bb8 100644 --- a/response.go +++ b/response.go @@ -6,7 +6,6 @@ import ( "net/http" jsoniter "github.com/json-iterator/go" - "github.com/pkg/errors" ) type Response struct { @@ -28,10 +27,14 @@ func (c *Response) GetBody() ([]byte, error) { return nil, c.err } if c.Response == nil || c.Body == nil { - return nil, errors.New("response is nil") + return []byte{}, nil } - defer c.Body.Close() - return ioutil.ReadAll(c.Body) + if rc, ok := c.Body.(*ReadCloser); ok { + return rc.Bytes(), nil + } + b, err := ioutil.ReadAll(c.Body) + _ = c.Body.Close() + return b, err } func (c *Response) BindJSON(v interface{}) error { @@ -39,8 +42,12 @@ func (c *Response) BindJSON(v interface{}) error { return c.err } if c.Response == nil || c.Body == nil { - return errors.New("response is nil") + return nil + } + if rc, ok := c.Body.(*ReadCloser); ok { + return jsoniter.Unmarshal(rc.Bytes(), v) } - defer c.Body.Close() - return errors.WithStack(jsoniter.NewDecoder(c.Body).Decode(v)) + err := jsoniter.NewDecoder(c.Body).Decode(v) + _ = c.Body.Close() + return err }