From 4b49f3457804b352e84b100cae70ae2e195a2761 Mon Sep 17 00:00:00 2001 From: wnanbei Date: Fri, 27 Sep 2019 14:38:37 +0800 Subject: [PATCH] add WrapErrf() --- datatype_test.go | 10 ++++++++++ download.go | 15 +++++++-------- error.go | 18 ++++++++++++++++-- error_test.go | 4 ++-- session.go | 2 +- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/datatype_test.go b/datatype_test.go index 442fb1f..90301f3 100644 --- a/datatype_test.go +++ b/datatype_test.go @@ -17,6 +17,16 @@ func TestHeaders(t *testing.T) { } } +//func TestParams(t *testing.T) { +// params := NewParams("xxx", "yyy") +// proxy := &Proxy{ +// HTTPS: "xxx", +// HTTP: "xxx", +// } +// req := NewRequestSetting("Post", "http://www.baidu.com", params, proxy) +// fmt.Printf("%+v", req) +//} + func TestStringSliceMap(t *testing.T) { params := NewParams( "key1", "value1", diff --git a/download.go b/download.go index 873a897..950c3fd 100644 --- a/download.go +++ b/download.go @@ -15,7 +15,7 @@ func (session *Session) send(reqSetting *RequestSetting) (*Response, error) { // Make new http.Request req, err := http.NewRequest(reqSetting.Method, reqSetting.URL, nil) if err != nil { - return nil, WrapError(err, "build Request error, please check request url or request method") + return nil, WrapErr(err, "build Request error, please check request url or request method") } // Handle the Headers. @@ -24,7 +24,7 @@ func (session *Session) send(reqSetting *RequestSetting) (*Response, error) { // Add proxy method to transport proxyFunc, err := getProxyFunc(reqSetting.Proxy, session.Proxy) if err != nil { - return nil, WrapError(err, "build proxy failed, please check Proxy and session.Proxy") + return nil, WrapErr(err, "build proxy failed, please check Proxy and session.Proxy") } if proxyFunc != nil { session.transport.Proxy = proxyFunc @@ -72,7 +72,7 @@ func (session *Session) send(reqSetting *RequestSetting) (*Response, error) { resp, err := session.client.Do(req) // do request if err != nil { - return nil, WrapError(err, "Request Error") + return nil, WrapErr(err, "Request Error") } defer func() { if err := resp.Body.Close(); err != nil { @@ -82,7 +82,7 @@ func (session *Session) send(reqSetting *RequestSetting) (*Response, error) { response, err := buildResponse(reqSetting, resp) if err != nil { - return nil, WrapError(err, "build Response Error") + return nil, WrapErr(err, "build Response Error") } return response, nil } @@ -91,7 +91,7 @@ func (session *Session) send(reqSetting *RequestSetting) (*Response, error) { func buildResponse(req *RequestSetting, resp *http.Response) (*Response, error) { content, err := ioutil.ReadAll(resp.Body) if err != nil { - return nil, WrapError(err, "read Response.Body failed") + return nil, WrapErr(err, "read Response.Body failed") } return &Response{ URL: req.URL, @@ -140,11 +140,11 @@ func getProxyFunc(p1, p2 *Proxy) (func(*http.Request) (*url.URL, error), error) httpURL, err := url.Parse(p.HTTP) if err != nil { - return nil, WrapError(err, "Proxy URL error, please check proxy url") + return nil, WrapErr(err, "Proxy URL error, please check proxy url") } httpsURL, err := url.Parse(p.HTTPS) if err != nil { - return nil, WrapError(err, "Proxy URL error, please check proxy url") + return nil, WrapErr(err, "Proxy URL error, please check proxy url") } return func(req *http.Request) (*url.URL, error) { // Create a function to choose proxy when transport start request @@ -165,6 +165,5 @@ func getRedirectFunc(r int) func(req *http.Request, via []*http.Request) error { } return nil } - return redirectFunc } diff --git a/error.go b/error.go index 3515bcc..7e816fa 100644 --- a/error.go +++ b/error.go @@ -48,8 +48,22 @@ func (e *Error) Unwrap() error { return nil } -// WrapError will wrap a error with some information: filename, line, time and some message. -func WrapError(err error, msg string) error { +// WrapErr will wrap a error with some information: filename, line, time and some message. +func WrapErr(err error, msg string) error { + _, file, line, _ := runtime.Caller(1) + return &Error{ + err: err, + msg: msg, + file: file, + fileLine: line, + time: time.Now().Format("2006-01-02 15:04:05"), + } +} + +// WrapErr will wrap a error with some information: filename, line, time and some message. +// You can format message of error. +func WrapErrf(err error, format string, args ...interface{}) error { + msg := fmt.Sprintf(format, args...) _, file, line, _ := runtime.Caller(1) return &Error{ err: err, diff --git a/error_test.go b/error_test.go index 08f38a7..5abc0cf 100644 --- a/error_test.go +++ b/error_test.go @@ -7,8 +7,8 @@ import ( func TestError(t *testing.T) { err1 := ErrRequestBody - err2 := WrapError(err1, "second testing") - err3 := WrapError(err2, "third testing") + err2 := WrapErr(err1, "second testing") + err3 := WrapErr(err2, "third testing") if !errors.Is(err3, ErrRequestBody) { t.Fatal("Test errors.Is failed.") diff --git a/session.go b/session.go index 821e5aa..83ff1d2 100644 --- a/session.go +++ b/session.go @@ -25,7 +25,7 @@ type Session struct { func (session *Session) Request(reqSetting *RequestSetting) (*Response, error) { resp, err := session.send(reqSetting) if err != nil { - return nil, WrapError(err, "request failed") + return nil, WrapErr(err, "request failed") } return resp, nil }