我尝试使用相同的请求主体创建两个HTTP请求。不幸的是,第二个请求发送了一个空体。
w := httptest.NewRecorder()
w2 := httptest.NewRecorder()
pd := &postData{
Data: 5,
}
b := new(bytes.Buffer)
json.NewEncoder(b).Encode(pd)
req, _ := http.NewRequest("PUT", "/v1/jobs/echo", b)
server.ServeHTTP(w, req)
req, _ = http.NewRequest("PUT", "/v1/jobs/echo", b)
server.ServeHTTP(w2, req)
阅读文档和bytes.Buffer的源代码,看起来没有办法将缓冲区重置为0 - 那里有一个重置方法,但这也擦除了缓冲区'内部状态。
有没有办法重播" Go的任何读者?一个bytes.Buffer或任何其他Reader。
答案 0 :(得分:3)
行。所以我不会考虑这个理想,最好只是首先启动一个读者,但如果你把数据放在bytes.Reader
而不是bytes.Buffer
,那么你就可以了在第一次打电话给NewRequest
之后,能够回到起点。
w := httptest.NewRecorder()
w2 := httptest.NewRecorder()
pd := &postData{
Data: 5,
}
b := new(bytes.Buffer)
json.NewEncoder(b).Encode(pd)
r := bytes.NewReader(b.Bytes())
req, _ := http.NewRequest("PUT", "/v1/jobs/echo", r)
server.ServeHTTP(w, req)
r.Seek(0, 0)
req, _ = http.NewRequest("PUT", "/v1/jobs/echo", r)
server.ServeHTTP(w2, req)