Как я прочитал тело ответа потоковой передачи с использованием пакета 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))
}