-2

在下面的代码片段中,我将 http 响应正文“b”解析为 func parseGoQuery,第一次没问题,但是当我在 main() 中第二次执行时,它显示响应“b”在 func parseGoQuery 中为 0。我想我传递了变量 'b' 的副本,而不是指针,我很困惑......请指教

resp, _ := client.Get(URL)
    b :=resp.Body

    defer b.Close() // close Body when the function returns
        parseGoQuery("tag1", b)  //b is not 0 as expected, good
    parseGoQuery("tag2", b)  //b is 0 !!!???

这是 func parseGoQuery

func parseGoQuery(tag string, b io.Reader) {
    fmt.Println(tag,b)
//skipped
}
4

1 回答 1

3

Response.body 的类型为 io.Readcloser。因此,一旦您从正文中读取,它将被关闭,并且进一步尝试从中读取将给出零值。您只能从正文中读取一次。

因此,将从 body 读取的数据存储在一个变量中,并将该变量传递给该函数。

于 2016-11-24T18:30:19.580 回答