1

我正在尝试从服务器读取 JSON 编码的字节,该字节将缩进,但长度不可预测,并且没有明显的终止字节。我想将整个服务器响应读入一个字节。服务器将关闭连接。是否可以使用 来做到这一点net

4

2 回答 2

4

作为@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}. 这可能不是一种常见的情况,但需要注意一些事情。

于 2012-11-02T02:08:34.377 回答
2

请查看http://golang.org/pkg/net/http/上的文档

http Get将返回一个Response结构,它的 Body 类型为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)
于 2012-11-02T01:21:32.997 回答