我有下面的例子,连接到一个HTTP服务,该服务将响应流返回到一个块流中以创建JSON结构。对于每个块,我的代码都附加了一个字节rb
数组和单独的行。然而,我的问题是试图计算出rb
何时完成,以便我可以解码它。
我是不是漏掉了什么明显的东西?
package main
import (
"bufio"
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
body := []byte("test")
resp, err := http.Post("http://localhost:8281/tap", "application/json", bytes.NewReader(body))
if err != nil {
fmt.Printf("%v\n", err)
return
}
defer resp.Body.Close()
fmt.Printf("Status: [%s]\n", resp.Status)
fmt.Println()
//var rb []byte
reader := bufio.NewReader(resp.Body)
var rb []byte
for {
line, err := reader.ReadBytes('\n')
if err != nil {
if err == io.EOF {
break
}
fmt.Printf("Error reading streamed bytes %v", err)
}
rb = append(rb, line...)
fmt.Println(rb)
}
}
字符串
1条答案
按热度按时间mrwjdhj31#
忽略程序中的错误,
rb
在循环中断后完成。程序有bug:
看起来你的目标是把对
rb
的整个响应都吸收掉。使用io.ReadAll来完成这个任务:字符串
如果你想将响应体解码为JSON,那么更好的方法是让JSON解码器读取响应体:
型