Jsonデータのhttpストリーミングを行うエンドポイントに接続しようとしています。 Goのnet/httpパッケージを使用して基本的なリクエストを実行し、応答を受信する方法を知りたいと思っていました。現在、接続を閉じたときにのみ応答を読み取ることができます。
resp, err := http.Get("localhost:8080/stream")
if err != nil {
...
}
...
// perform work while connected and getting data
どんな洞察もいただければ幸いです!
ありがとう!
-RC
ストリーミングJSON解析を行う方法は、デコーダーを使用することです。
json.NewDecoder(resp.Body).Decode(&yourStuff)
戻ってくる一連のオブジェクトであるストリーミングAPI(Twitterなど)の場合、このモデルと組み込みのencoding/json APIを使用すると、ストリーミングがうまくいくはずです。しかし、10MBの巨大な配列を持つオブジェクトがある大きな応答である場合、おそらく独自のデコーダーを作成してそれらの内部のピースを引き出して返す必要があります。私が書いたライブラリでその問題に遭遇しています。
Eve Freemanが提供する答えは、jsonデータを読み取る正しい方法です。あらゆるタイプのデータを読み取るには、以下の方法を使用できます。
resp, err := http.Get("http://localhost:3000/stream")
...
reader := bufio.NewReader(resp.Body)
for {
line, err := reader.ReadBytes('\n')
...
log.Println(string(line))
}