go中的http响应迭代

时间:2016-02-02 00:29:54

标签: http go slice

我有一个返回文本行的HTTP端点。以下是我如何获取它。

response, err := client.Do(request)
if err != nil {
    log.Errorf("Error with request: %s", err)
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
    log.Errorf("Error: %s", err)
}

这就是我正在读的身体。问题是我有一个来自阅读器的大字节数组,但我不完全确定如何将它从字节数组转换为一条线。

如何将字节数组转换为一条线?

1 个答案:

答案 0 :(得分:3)

您可以使用bytes.Split将响应正文分成几行:

 lines := bytes.Split(body, []byte{'\n'})  // lines is a [][]byte

您还可以使用scanner来迭代这些行:

response, err := client.Do(request)
if err != nil {
    log.Errorf("Error with request: %s", err)
}
defer response.Body.Close()
s := bufio.NewScanner(response.Body)
for s.Scan() {
    // do something with s.Bytes() or s.Text()
}
if err := s.Err(); err != nil {
    // handle error
}