1 回答

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
首先,我繼續(xù)使用gzip和gin包。
現(xiàn)在,我使用與此類似的函數(shù)來壓縮我的響應(yīng):
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
}
當(dāng)我需要響應(yīng)請(qǐng)求時(shí),我執(zhí)行如下操作:
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通過設(shè)置 HTML 標(biāo)頭來告訴響應(yīng)已被壓縮。
八個(gè)月以來,它已經(jīng)在五個(gè)不同的 API 上進(jìn)行了測(cè)試。
我希望它對(duì)其他人有用,就像對(duì)我有用一樣。
- 1 回答
- 0 關(guān)注
- 170 瀏覽
添加回答
舉報(bào)