如何使用Golang的net / http包读取流式响应主体?

时间:2014-03-01 00:41:08

标签: http go http-streaming

我正在尝试连接到执行json数据的http流的端点。我想知道如何使用Go的net / http包执行基本请求并在响应时读取响应。目前,我只能在连接关闭时读取响应。

resp, err := http.Get("localhost:8080/stream")
if err != nil {
    ...
}
...
// perform work while connected and getting data

非常感谢任何见解!

谢谢!

-RC

2 个答案:

答案 0 :(得分:36)

Eve Freeman提供的答案是读取json数据的正确方法。要读取任何类型的数据,您可以使用以下方法:

resp, err := http.Get("http://localhost:3000/stream")
...

reader := bufio.NewReader(resp.Body)
for {
    line, err := reader.ReadBytes('\n')
    ...

    log.Println(string(line))
}

答案 1 :(得分:15)

进行流式JSON解析的方法是使用解码器:

json.NewDecoder(resp.Body).Decode(&yourStuff)

对于流媒体API,其中有一堆对象回来(推特),应该使用此模型和内置编码/ json API流式传输。但是如果它是一个很大的响应,你有一个拥有10MB内容的巨大数组的对象,你可能需要编写自己的解码器来拉出那些内部碎片然后返回它们。我正在编写一个我写过的库。