【发布时间】:2016-08-16 18:27:24
【问题描述】:
作为围棋新手,我很难确定问题所在,但希望提供一些事实会对您有所帮助。
我正在使用一个 API,它将其 Content-Encoding 作为 gzip 返回。我编写了以下代码来编码我的响应结构:
reader, err = gzip.NewReader(resp.Body)
defer reader.Close()
// print to standard out
//_, err = io.Copy(os.Stdout, reader)
//if err != nil {
// log.Fatal(err)
//}
// Decode the response into our tescoResponse struct
var response TescoResponse
err := json.NewDecoder(reader).Decode(&response)
为简洁起见,我删除了错误处理,但有趣的是,如果我取消对标准输出的打印注释,我会得到预期的结果。但是,解码并没有给我我的期望。任何指针?结构必须精确映射到响应吗??
这是完整的示例: https://play.golang.org/p/4eCuXxXm3T
【问题讨论】:
-
http包自动解码 gzip 响应。你从resp.Body得到的是未压缩的响应。无需手动解码。像这样解码:json.NewDecoder(resp.Body).Decode(&response) -
这样做会给我错误
[NewDecoder]: invalid character '\x1f' looking for beginning of value -
如果响应包含
Content-Encoding: gzip标头,net/http包会自动为您解码。请检查是否存在。 -
您看过我发布的完整示例吗?其中一个步骤是检查编码。