在下面的代码片段中,我将http响应体'b'解析为func parseGoQuery,第一次就可以了,但是当我第二次在main()中执行它时,它会向我显示func parseGoQuery中的响应'b'为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
}
答案 0 :(得分:3)
Response.body的类型为io.Readcloser。 因此,一旦你从身体中读取它,它将被关闭,并且进一步尝试从它读取将给出零值。 你只能从身体上读一次。
因此,将您从body读取的数据存储在变量中,并将该变量传递给该函数。