Golanghttputil库,一行代码搞定http请求

进击的代码 2024-10-07 16:20:36

概览

在 golang 程序中进行 http 请求时,一般的步骤是:

组合 url 和 param 参数get 和 put 需要准备请求体数据进行 http 请求(设置超时)错误判断和状态码判断http 返回内容解析

如果后端程序每个 http 请求都如上面这样处理,将产生很多相似的代码,

并且在复制代码的时候,容易出错(需要修改的地方忘记修改),浪费 debug 的时间。

于是,我封装了一个简便的 httputil 库,用于 http 请求。

详见 https://github.com/chinaran/httputil

支持 get, post, put, patch, delete 方法支持 string, []byte, map, struct 作为 request 和 response 数据默认超时:30s默认传输类型:application/json示例

package mainimport ( "context" "log" hu "github.com/chinaran/httputil")func main() { // get urlGet := "https://httpbin.org/get?hello=world" respGetM := map[string]interface{}{} if err := hu.Get(context.TODO(), urlGet, &respGetM, hu.WithLogTimeCost()); err != nil { log.Printf("Get %s err: %s", urlGet, err) return } log.Printf("Get %s map response: %+v", urlGet, respGetM) respGetStr := "" if err := hu.Get(context.TODO(), urlGet, &respGetStr, hu.WithLogTimeCost()); err != nil { log.Printf("Get %s err: %s", urlGet, err) return } log.Printf("Get %s string response: %+v", urlGet, respGetStr) // post urlPost := "https://httpbin.org/post" req := map[string]string{"hello": "world"} respPost := struct { Data string `json:"data"` }{} if err := hu.Post(context.TODO(), urlPost, &req, &respPost, hu.WithLogTimeCost()); err != nil { log.Printf("Post %s err: %s", urlPost, err) return } log.Printf("Post %s struct response: %+v", urlPost, respPost)}

示例结果

0 阅读:23
进击的代码

进击的代码

程序员,分享生活、工作、技术、学习。