我正在構建一個 Go 應用程序,它接受一個http.Response對象并將其(響應頭和正文)保存到 redis 哈希中。當應用程序收到一個http.Response.Body未壓縮的文件時,我想在將其保存到緩存之前對其進行 gzip。我的困惑源于我無法清楚地了解 Go 的io接口,以及如何在http.Response.Body'sio.ReadCloser和 gzip之間進行協(xié)商Writer。我想這里有一個優(yōu)雅的流媒體解決方案,但我無法讓它發(fā)揮作用。
1 回答

眼眸繁星
TA貢獻1873條經驗 獲得超9個贊
v
如果你已經確定身體無壓縮,如果你需要一個[]byte壓縮的數(shù)據(jù)(而不是例如已經有一個io.Writer你可以寫,例如,如果你想身體保存到一個文件,那么你會希望流到文件而不是緩沖區(qū))然后這樣的事情應該工作:
func getCompressedBody(r *http.Response) ([]byte, error) {
var buf bytes.Buffer
gz := gzip.NewWriter(&buf)
if _, err := io.Copy(gz, r.Body); err != nil {
return nil, err
}
err := gz.Close()
return buf.Bytes(), err
}
(這只是一個例子,可能是內聯(lián)的,而不是作為一個函數(shù);如果你想要它作為一個函數(shù),那么它可能應該使用 anio.Reader而不是 an *http.Response)。
- 1 回答
- 0 關注
- 212 瀏覽
添加回答
舉報
0/150
提交
取消