Как разобрать копию переменной вместо указателя в 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. Поэтому, как только вы прочитаете из тела, оно закроется, и дальнейшие попытки чтения из него приведут к нулевому значению. Вы можете читать с тела только один раз.

Итак, сохраните данные, которые вы прочитали из тела, в переменную и передайте эту переменную этой функции.

Другие вопросы по тегам