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

huangapple go评论74阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2016年11月25日 01:53:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/40792324.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定