Go
http 请求
本文档使用 MrDoc 发布
-
+
首页
http 请求
在Go中,我们常常需要关闭`request.Body` 和 `response.Body`,原因如下: > 即使 request 和 response 是一个局部变量,当请求完成后,r.Body 仍然需要显式关闭以释放相关资源,避免资源泄漏。Go 的 http.Request 对象 和 http.Response 对象 的 Body 是一个 io.ReadCloser,需要手动关闭。io.ReadCloser 对象不会自动回收。即使 io.ReadCloser 对象是一个局部变量,当它不再被使用时,Go 的垃圾回收器会回收它的内存,但这并不包括底层资源(如文件描述符、网络连接等)。这些资源需要显式关闭以释放。 Get请求: ``` type ApiResponse struct { Code int Data interface{} Message string } func GetRequest() (*SubnetResult, error) { url := "" resp, err := http.Get(url) if err != nil { fmt.Println(err) return nil, err } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) var response ApiResponse if err := json.Unmarshal(body, &response); err != nil { fmt.Println(err) return nil, err } data := response.Data.(map[string]interface{}) var result SubnetResult if err := mapstructure.Decode(data, &result); err != nil { fmt.Println(err) return nil, err } fmt.Println("SubnetResult=", result) return &result, nil } ``` Post 请求: ``` func PostRequest() error { url := "" param := Param{ Name: "hello" } paramBytes, err := json.Marshal(param) if err != nil { return err } r, err := http.Post(url, "application/json", bytes.NewBuffer(paramBytes)) if err != nil { return err } defer r.Body.Close() body, _ := io.ReadAll(r.Body) var response ApiResponse if err := json.Unmarshal(body, &response); err != nil { fmt.Println(err) return err } if response.Code == 0 { return nil } return errors.New(response.Message) } ```
gaojian
2024年10月21日 13:57
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码