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