gpt4 book ai didi

http - 如何从 bytes.Buffer 中多次读取?

转载 作者:IT王子 更新时间:2023-10-29 02:29:49 25 4
gpt4 key购买 nike

我正在尝试使用相同的请求正文创建两个 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 - 有一个 Reset 方法,但这也会删除缓冲区的内部状态。

有没有办法在 Go 中“重放”任何阅读器? bytes.Buffer 或任何其他阅读器。

最佳答案

好的。所以我不认为这是理想的,最好首先初始化一个阅读器,但是如果你把你的数据放在 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)

关于http - 如何从 bytes.Buffer 中多次读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35351235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com