当前位置: 首页 > 面试题库 >

在golang中多次请求后多次关闭响应正文

袁晋鹏
2023-03-14
问题内容

在这篇文章中),指出了response.Body应该被关闭以避免资源泄漏。它也显示在http软件包godoc的概述示例中。

在测试代​​码中,我发送了多个请求以尝试使用

resp, err := http.DefaultClient.Do(req)

在同一功能中多次。这是不好的做法吗?在这种情况下,我要defer resp.Body.Close()在每本书之后写一次还是只写一次?

url := server.URL + "/ticket/add"                                       
reader = strings.NewReader(`{"id": "test1", "detail": "test1"}`)        
req, err := http.NewRequest("POST", url, reader)                        
assert.Nil(t, err)

resp, err := http.DefaultClient.Do(req)                                 
assert.Nil(t, err)

defer resp.Body.Close()

assert.Equal(t, http.StatusCreated, resp.StatusCode)                    
// add a ticket with same id                                            
reader = strings.NewReader(`{"id": "test1"}`)                           
req, err = http.NewRequest("POST", url, reader)                         
assert.Nil(t, err)

resp, err = http.DefaultClient.Do(req)                                  
assert.Nil(t, err)                                                      
assert.Equal(t, http.StatusInternalServerError, resp.StatusCode)

在服务器端(即)内部的相关问题,func(w http.ResponseWriter, r *http.Request)是否也需要关闭请求主体?


问题答案:

是的,您需要关闭两个回复。推迟一个呼叫resp.Body.Close不会以某种方式影响另一个。*http.Response每种情况下的都不同,并且两者都可以推迟。

在服务器端,您无需关闭文档中的Request.Body-
http.Request

// The Server will close the request body. The ServeHTTP
// Handler does not need to.


 类似资料:
  • 问题内容: 我正在构建Blob存储系统,我选择了Go作为编程语言。我创建了一个流,以执行从客户端到Blob服务器的分段文件上传。 流工作正常,但我想从请求正文中进行sha1哈希处理。我需要io。复制身体两次。创建了sha1,但是多部分流之后0字节。 用于创建哈希 用于将身体分为多个部分 任何想法我该怎么做? 客户上传 sha1函数 } 上传句柄 } 问题答案: 您不能直接执行此操作,但可以编写在i

  • 问题内容: type ValidationModel struct { Name string Email string Password string } 首先,我使用govalidator验证请求正文。 在验证了请求之后,我再次将请求主体解码为用户结构,但已使用validationModel读取了请求主体一次,因此当我尝试再次将其解码为用户时,它没有提供任何值。 我在这里可以想到两种解决方案:

  • 问题内容: 我正在尝试解析方法的某些参数,从请求正文中提取值并进行验证,然后将其注入某些带注释的参数中。 最大的问题是我发现(get from )不能 多次 读取输入流(某些参数在请求正文中)。那么,如何才能多次检索/ 或请求正文? 问题答案: 您可以添加过滤器,拦截当前过滤器并将其包装在custom中。在您的custom中,您将读取请求主体并将其缓存,然后实现并从缓存的值中读取。由于包装请求后,

  • 我试图解析方法的某些特定参数,从请求体中提取值并验证它们,然后将它们注入特定的带注释的参数中。 最大的问题是,我发现(从)读取输入流(某些参数在请求正文中)的次数不能超过一次。那么,如何多次检索/或请求正文?

  • 本文向大家介绍关于ajax的多次请求问题,包括了关于ajax的多次请求问题的使用技巧和注意事项,需要的朋友参考一下 我们在用ajax请求数据时,可能会遇到一次点击多次触发的可能。 (比如说:ajax 的 onreadystatechange 事件就会触发多次;这是因为 onreadystatechange 是一个事件句柄。 它的值 (state_Change) 是一个函数的名称,当 XMLHttp

  • t[object对象]。(/home/ubuntu/node_modules/mongodb/lib/mongodb/connection/server.js:530:7)在[object object]。在[object object]发出(events.js:88:20)。(/home/ubuntu/node_modules/mongodb/lib/mongodb/connection/con