2016-11-24 18 views
-2

在下面的代码段我解析HTTP响应身体“B”到FUNC parseGoQuery和它是确定第一次,但是当我做在它第二次主()它显示我,响应“b”为0 FUNC parseGoQuery内部。我想我通过变量 '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 
} 

回答

3

Response.body的类型是io.Readcloser的。 所以,一旦你从身体读取,它会被关闭,并进一步尝试从它读取将给零值。 你只能从身体读一次。

因此,存储的数据会从身体的可变的读取和变量传递给该函数。

+0

但是这就是我正在做的,在变量'b'中存储body的响应并将'b'传递给func – irom

+3

@irom不,这是_absolutely_而不是当你写'b:= resp.Body ':这一行声明b“和”resp.Body“一样,没有其他的东西,你不是从身体上读书,也不是在做一个”深度“的复制,你根本无法从resp.Body中读取多次,无论你试图做什么,无论你是从b还是从res.Body读取都没关系。 – Volker

相关问题