如何在go中解析变量的副本而不是指针?

如何在go中解析变量的副本而不是指针?,go,goquery,Go,Goquery,在下面的代码段中,我将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 parseGoQu

在下面的代码段中,我将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
}

Response.body的类型为io.Readcloser。 因此,一旦你从主体中读取,它将被关闭,进一步尝试从主体中读取将得到一个零值。 你只能从身体上读一次


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

但这就是我要做的,将body的响应存储在变量“b”中,并将“b”传递给func@irom不,这绝对不是您在编写
b:=resp.Body
时所做的:此行声明b与resp.Body“相同””“没有别的了。你不是在从身体上阅读,也不是在做“深度”复制。无论你想做什么,你都不能从各自的身体里读一次以上。无论你是从b读还是从相应的正文读,这都无关紧要。详细信息请访问Go。