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 關注
- 181 瀏覽
添加回答
舉報