在下面的代码片段中,我将 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
}
最佳答案
Response.body 是 io.Readcloser 类型。 因此,一旦您从正文中读取,它将关闭,进一步尝试从中读取将给出零值。 您只能从正文中读取一次。
因此,将您从 body 中读取的数据存储在一个变量中,并将该变量传递给该函数。
关于go - 如何解析变量的副本而不是指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40792324/