Я сейчас запрашиваю Друида и возвращаю большой набор данных обратно (примерно 4-5 ГБ). Я хотел бы обработать этот ответ и декодировать JSON в список структур. У меня это работает нормально, когда я изменяю запрос, чтобы вернуть меньший набор данных, но как только ответ становится слишком большим, я получаю ошибку unexpected EOF
.
Я попытался прочитать все тело ответа
bytes, err := ioutil.ReadAll(resp.Body)
Непосредственное декодирование тела ответа
var object []NewObject
err = json.NewDecoder(resp.Body).Decode(&object)
Создание буфера и запись в файл
f, err := os.OpenFile("/tmp/test.txt", os.O_APPEND|os.O_WRONLY, 0600)
defer f.Close()
const oneMB = 1024 * 1024
bytesRead := 0
respBuf := make([]byte, oneMB)
// Read the response body
for {
n, err := resp.Body.Read(respBuf)
bytesRead += n
if err == io.EOF {
break
}
if err != nil {
fmt.Println("Error reading HTTP response: ", err.Error())
break
}
if _, err = f.Write(respBuf); err != nil {
panic(err)
}
}
Все это закончилось тем, что я получил ошибку unexpected EOF
. Я использую модуль net/http
по умолчанию и encoding/json
, которые, по-видимому, должны нормально работать. Могу ли я попробовать что-нибудь еще?