英文:
How to parse copy of variable instead of pointer in go?
问题
在下面的代码片段中,我将http响应体'b'解析给parseGoQuery函数,第一次是可以的,但是当我在main()函数中第二次这样做时,它显示在parseGoQuery函数内部'b'的值为0。我认为我传递的是变量'b'的副本,而不是指针,我感到困惑...请给予建议。
resp, _ := client.Get(URL)
b := resp.Body
defer b.Close() // 当函数返回时关闭Body
parseGoQuery("tag1", b) // b的值不为0,符合预期,好的
parseGoQuery("tag2", b) // b的值为0!???
这是parseGoQuery函数:
func parseGoQuery(tag string, b io.Reader) {
fmt.Println(tag, b)
// 省略部分代码
}
英文:
In below code snippet I parse http response body 'b' to func parseGoQuery and it is ok first time, but when I do it second time in main() it shows me that response 'b' is 0 inside func parseGoQuery. I think I pass copy of variable 'b' , not pointer, I am confused...please advice
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 !!!???
Here is func parseGoQuery
func parseGoQuery(tag string, b io.Reader) {
fmt.Println(tag,b)
//skipped
}
答案1
得分: 3
Response.body的类型是io.ReadCloser。
因此,一旦你从body中读取数据,它就会被关闭,进一步尝试从中读取数据将返回零值。
你只能从body中读取一次。
所以,将你从body中读取的数据存储在一个变量中,并将该变量传递给该函数。
英文:
Response.body is of type io.Readcloser.
So once you read from the body, it will get closed and further attempts to read from it will give a zero value.
You can only read from the body once.
So, Store the data you have read from body in a variable and pass that variable to that function.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论