Как разобрать копию переменной вместо указателя в go?
В приведенном ниже фрагменте кода я анализирую тело ответа http 'b' в func parseGoQuery, и это нормально в первый раз, но когда я делаю это во второй раз в main(), он показывает мне, что ответ '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
}
1 ответ
Решение
Response.body имеет тип io.Readcloser. Поэтому, как только вы прочитаете из тела, оно закроется, и дальнейшие попытки чтения из него приведут к нулевому значению. Вы можете читать с тела только один раз.
Итак, сохраните данные, которые вы прочитали из тела, в переменную и передайте эту переменную этой функции.