1 回答
TA贡献2041条经验 获得超4个赞
ReadAll 从 r 读取直到出现错误或 EOF 并返回它读取的数据。
当您用来读取常规端点的正文时,它会起作用,因为有效负载有一个EOF
:服务器使用标头来Content-Length
告诉正文响应有多少字节,一旦客户端读取了那么多字节,它就会明白它已经读取了全身上下都可以停下来。
但是,您的“流”端点没有使用,因为正文的大小未知,它应该在事件到来时写入事件,因此在这种情况下Content-Length
您不能使用。ReadAll
通常,在这种情况下,您应该逐行阅读,其中每行代表一个事件。bufio.Scanner
正是这样做的:
res, err := http.Get("http://localhost:8084/api/v1/events")
if err != nil {
panic(err.Error())
}
scanner := bufio.NewScanner(res.Body)
for e.scanner.Scan() {
if err := e.scanner.Err(); err != nil {
panic(err.Error())
}
event := e.scanner.Bytes()
var data Email
json.Unmarshal(event, &data)
fmt.Printf("Email: %v\n", data)
}
curl可以按预期处理响应,因为它会检查端点是否会流式传输数据,因此它会相应地做出反应。添加对问题的响应可能会有所帮助curl。
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报