1 回答
TA贡献1826条经验 获得超6个赞
首先,我继续使用gzip和gin包。
现在,我使用与此类似的函数来压缩我的响应:
func compress(response interface{}) ([]byte, error) {
body, err := json.Marshal(response)
if err != nil {
return nil, err
}
var buffer bytes.Buffer
zw := gzip.NewWriter(&buffer)
_, err = zw.Write(body)
closeErr := zw.Close()
if err != nil {
return nil, err
}
if closeErr != nil {
return nil, err
}
return buffer.Bytes(), nil
}
当我需要响应请求时,我执行如下操作:
gzipOutput, err := compressResponse(output)
if err != nil {
c.JSON(http.StatusInternalServerError, err.Error())
return
}
c.Writer.Header().Set("Accept-Encoding", "gzip")
c.Writer.Header().Set("Content-Encoding", "gzip")
c.Writer.Header().Set("Content-Type", "application/json")
c.Data(http.StatusOK, "gzip", gzipOutput)
正如我们所看到的,其想法是gin通过设置 HTML 标头来告诉响应已被压缩。
八个月以来,它已经在五个不同的 API 上进行了测试。
我希望它对其他人有用,就像对我有用一样。
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报