サーバーからJSONでエンコードされたバイトを読み取ろうとしています。これはインデントされますが、長さが予測できず、明確な終了バイトがありません。サーバーの応答全体を1バイトに読み込みたいと思います。サーバーは接続を閉じます。を使用してこれを行うことは可能net
ですか?
2 に答える
@minikomi の回答の補足として、サーバーから返されたバイトが JSON でエンコードされていることが確実な場合は、encoding/json
これに適したパッケージがあることを追加したいと思います。
http://golang.org/pkg/encoding/json/
デコーダーを使用して接続から直接デコードしている場合、エラーが返されないことがあります。fmt.Printf("%v\n", whateverDecodedFromTheConnection)
接続が閉じられたときにデコーダーが構造体に対して取得するものを確認するために使用することができます。
たとえば、私の場合、encoding/gob
デコーダーを使用して、tcp 接続からのメッセージを次のように定義された構造体にデコードします。
type MessageType struct {
Type uint8
}
接続が閉じられると、decoder.Decode(&buffer)
が返されます{0}
。これは一般的な状況ではないかもしれませんが、注意が必要です。
http://golang.org/pkg/net/http/のドキュメントをご覧ください。
http Getは、タイプがBodyを持つResponse構造体を返しio.ReadCloser
ます。
次に、 ioutil.ReadAllを使用して、バイト配列に対する応答全体を読み取ることができます。
resp, err := http.Get("http://example.com/")
if err != nil {
// handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)