diff --git a/net/gclient/gclient_request_obj.go b/net/gclient/gclient_request_obj.go index 45e65c4cc15..852eaff67ca 100644 --- a/net/gclient/gclient_request_obj.go +++ b/net/gclient/gclient_request_obj.go @@ -31,14 +31,16 @@ import ( // // The response object `res` should be a pointer type. It automatically converts result // to given object `res` is success. -// Eg: +// +// Example: // var ( // // req = UseCreateReq{} // res *UseCreateRes // // ) -// DoRequestObj(ctx, req, &res) +// +// err := DoRequestObj(ctx, req, &res) func (c *Client) DoRequestObj(ctx context.Context, req, res interface{}) error { var ( method = gmeta.Get(req, gtag.Method).String() diff --git a/net/gclient/gclient_var.go b/net/gclient/gclient_var.go index 977c1b2e119..bb0ba66fe68 100644 --- a/net/gclient/gclient_var.go +++ b/net/gclient/gclient_var.go @@ -11,70 +11,85 @@ import ( "net/http" "github.com/gogf/gf/v2/container/gvar" + "github.com/gogf/gf/v2/internal/intlog" ) -// GetVar sends a GET request, retrieves and converts the result content to specified pointer. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// GetVar sends a GET request, retrieves and converts the result content to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) GetVar(ctx context.Context, url string, data ...interface{}) *gvar.Var { return c.RequestVar(ctx, http.MethodGet, url, data...) } -// PutVar sends a PUT request, retrieves and converts the result content to specified pointer. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// PutVar sends a PUT request, retrieves and converts the result content to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) PutVar(ctx context.Context, url string, data ...interface{}) *gvar.Var { return c.RequestVar(ctx, http.MethodPut, url, data...) } -// PostVar sends a POST request, retrieves and converts the result content to specified pointer. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// PostVar sends a POST request, retrieves and converts the result content to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) PostVar(ctx context.Context, url string, data ...interface{}) *gvar.Var { return c.RequestVar(ctx, http.MethodPost, url, data...) } -// DeleteVar sends a DELETE request, retrieves and converts the result content to specified pointer. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// DeleteVar sends a DELETE request, retrieves and converts the result content to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) DeleteVar(ctx context.Context, url string, data ...interface{}) *gvar.Var { return c.RequestVar(ctx, http.MethodDelete, url, data...) } -// HeadVar sends a HEAD request, retrieves and converts the result content to specified pointer. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// HeadVar sends a HEAD request, retrieves and converts the result content to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) HeadVar(ctx context.Context, url string, data ...interface{}) *gvar.Var { return c.RequestVar(ctx, http.MethodHead, url, data...) } -// PatchVar sends a PATCH request, retrieves and converts the result content to specified pointer. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// PatchVar sends a PATCH request, retrieves and converts the result content to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) PatchVar(ctx context.Context, url string, data ...interface{}) *gvar.Var { return c.RequestVar(ctx, http.MethodPatch, url, data...) } -// ConnectVar sends a CONNECT request, retrieves and converts the result content to specified pointer. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// ConnectVar sends a CONNECT request, retrieves and converts the result content to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) ConnectVar(ctx context.Context, url string, data ...interface{}) *gvar.Var { return c.RequestVar(ctx, http.MethodConnect, url, data...) } -// OptionsVar sends an OPTIONS request, retrieves and converts the result content to specified pointer. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// OptionsVar sends an OPTIONS request, retrieves and converts the result content to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) OptionsVar(ctx context.Context, url string, data ...interface{}) *gvar.Var { return c.RequestVar(ctx, http.MethodOptions, url, data...) } -// TraceVar sends a TRACE request, retrieves and converts the result content to specified pointer. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// TraceVar sends a TRACE request, retrieves and converts the result content to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) TraceVar(ctx context.Context, url string, data ...interface{}) *gvar.Var { return c.RequestVar(ctx, http.MethodTrace, url, data...) } -// RequestVar sends request using given HTTP method and data, retrieves converts the result -// to specified pointer. It reads and closes the response object internally automatically. -// The parameter `pointer` can be type of: struct/*struct/**struct/[]struct/[]*struct/*[]struct, etc. +// RequestVar sends request using given HTTP method and data, retrieves converts the result to *gvar.Var. +// The client reads and closes the response object internally automatically. +// The result *gvar.Var can be conveniently converted to any type you want. func (c *Client) RequestVar(ctx context.Context, method string, url string, data ...interface{}) *gvar.Var { response, err := c.DoRequest(ctx, method, url, data...) if err != nil { + intlog.Errorf(ctx, `%+v`, err) return gvar.New(nil) } - defer response.Close() + defer func() { + if err = response.Close(); err != nil { + intlog.Errorf(ctx, `%+v`, err) + } + }() return gvar.New(response.ReadAll()) }