我正在尝试使用相同的请求正文创建两个 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)
Run Code Online (Sandbox Code Playgroud)
通读 bytes.Buffer 的文档和源代码,似乎无法将缓冲区重置为 0 - 有一个 Reset 方法,但这也会清除缓冲区的内部状态。
有没有办法在 Go 中“重播”任何读者?一个 bytes.Buffer 或任何其他 Reader。
好的。所以我不会考虑这个理想,最好首先初始化一个读者,但如果你把你的数据放在一个bytes.Reader而不是,bytes.Buffer那么你就可以在第一次调用NewRequesthas读到最后。
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)
Run Code Online (Sandbox Code Playgroud)