2 回答

TA貢獻1878條經驗 獲得超4個贊
壓縮到緩沖區并發布該緩沖區。
var buf bytes.Buffer
gz := gzip.NewWriter(&buf)
gz.Write(myJSON)
gz.Close()
因為a*bytes.Buffer是靜態io.Reader接口,所以創建請求時可以直接使用緩沖區。
req, err := http.NewRequest("POST", url, &buf)
if err != nil {
// handle error
}
req.Header.Set("Content-Encoding", "gzip")
req.Header.Set("Content-Type", "application/json; charset=utf-8")

TA貢獻1850條經驗 獲得超11個贊
最好的選擇是將 JSON 編組流式傳輸到 gzip 編寫器:
func compressJSON(w io.Writer, i interface{}) error {
gz := gzip.NewWriter(w)
if err := json.NewEncoder(gz).Encode(i); err != nil {
return err
}
return gz.Close()
}
這樣做的好處是不會暫時在內存中緩沖 json,因此速度會更快并且使用更少的 RAM。
如果您需要將其作為io.Reader,例如 HTTP 請求的正文,則可以使用管道進行轉換:
r, w := io.Pipe()
go func() {
err := compressJSON(w, someObject)
w.CloseWithError(err)
}()
req, err := http.NewRequest("POST", "http://example.com/", r)
- 2 回答
- 0 關注
- 121 瀏覽
添加回答
舉報