go-resty/resty 做了简略的封装。

package utilsimport (    "crypto/tls"    "github.com/go-resty/resty/v2"    "time")// ResponseJson json 响应约定type ResponseJson struct {    Code uint32      `json:"code"`    Msg  string      `json:"msg"`    Data interface{} `json:"data"`}const httpClientTimeOut = 3const httpClientRetryCount = 3// HttpGetResJson get request and json responsefunc HttpGetResJson(url string, queryParams map[string]string, result interface{}) (res *resty.Response, err error) {    client := resty.New()    client.SetTimeout(time.Second * httpClientTimeOut)    client.SetRetryCount(httpClientRetryCount)    client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})    res, err = client.R().        SetQueryParams(queryParams).        SetHeader("Accept", "application/json").        SetResult(result).        Get(url)    return res, err}func HttpPostFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendFormResJson(url, "POST", formData, result)}func HttpPutFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendFormResJson(url, "PUT", formData, result)}func HttpPatchFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendFormResJson(url, "PATCH", formData, result)}func HttpDeleteFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendFormResJson(url, "DELETE", formData, result)}func HttpOptionsFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendFormResJson(url, "OPTIONS", formData, result)}func HttpHeadFormResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendFormResJson(url, "HEAD", formData, result)}func HttpPostJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendJsonResJson(url, "POST", formData, result)}func HttpPutJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendJsonResJson(url, "PUT", formData, result)}func HttpPatchJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendJsonResJson(url, "PATCH", formData, result)}func HttpDeleteJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendJsonResJson(url, "DELETE", formData, result)}func HttpOptionsJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendJsonResJson(url, "OPTIONS", formData, result)}func HttpHeadJsonResJson(url string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    return HttpSendJsonResJson(url, "HEAD", formData, result)}// HttpSendFormResJson send formData and response jsonfunc HttpSendFormResJson(url, method string, formData map[string]string, result interface{}) (res *resty.Response, err error) {    client := resty.New()    client.SetTimeout(time.Second * httpClientTimeOut)    client.SetRetryCount(httpClientRetryCount)    client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})    req := client.R().        SetHeader("Content-Type", "application/x-www-form-urlencoded").        SetHeader("Accept", "application/json").        SetFormData(formData).        SetResult(result)    switch strings.ToLower(method) {    case "post":        res, err = req.Post(url)    case "put":        res, err = req.Put(url)    case "patch":        res, err = req.Patch(url)    case "delete":        res, err = req.Delete(url)    case "options":        res, err = req.Options(url)    default:        res, err = req.Head(url)    }    return res, err}// HttpSendJsonResJson send json and response jsonfunc HttpSendJsonResJson(url, method string, body interface{}, result interface{}) (res *resty.Response, err error) {    client := resty.New()    client.SetTimeout(time.Second * httpClientTimeOut)    client.SetRetryCount(httpClientRetryCount)    client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})    req := client.R().        SetHeader("Content-Type", "application/json").        SetHeader("Accept", "application/json").        SetBody(body).        SetResult(result)    switch strings.ToLower(method) {    case "post":        res, err = req.Post(url)    case "put":        res, err = req.Put(url)    case "patch":        res, err = req.Patch(url)    case "delete":        res, err = req.Delete(url)    case "options":        res, err = req.Options(url)    default:        res, err = req.Head(url)    }    return res, err}