Как мне прочитать потоковое тело ответа, используя пакет Golang net/http?
Я пытаюсь подключиться к конечной точке, которая выполняет http потоковую передачу данных JSON. Мне было интересно, как выполнить базовый запрос с помощью пакета Go / net / http и прочитать ответ по мере его поступления. В настоящее время я могу прочитать ответ только при закрытии соединения.
resp, err := http.Get("localhost:8080/stream")
if err != nil {
...
}
...
// perform work while connected and getting data
Любое понимание будет с благодарностью!
Спасибо!
-RC
2 ответа
Потоковый анализ JSON можно выполнить с помощью декодера:
json.NewDecoder(resp.Body).Decode(&yourStuff)
Для потокового API, где возвращается множество объектов (например, в Twitter), это должно отлично работать с этой моделью и встроенным API кодирования / JSON. Но если это большой отклик, когда у вас есть объект, у которого есть гигантский массив с 10 МБ содержимого, вам, вероятно, нужно написать собственный декодер, чтобы вытащить эти внутренние части и вернуть их. Я столкнулся с этой проблемой с библиотекой, которую я написал.
Ответ, предоставленный Евой Фриман, является правильным способом чтения данных JSON. Для чтения любого типа данных вы можете использовать метод ниже:
resp, err := http.Get("http://localhost:3000/stream")
...
reader := bufio.NewReader(resp.Body)
for {
line, err := reader.ReadBytes('\n')
...
log.Println(string(line))
}