真的很喜欢这个功能,小巧精悍。最近在一个项目中用到了,大概是这样的:
项目中有一个自定义的 http.RoundTripper,之前都是纯文本发送数据,现在想加上 gzip 压缩。
func (crt roundTripper) RoundTrip(r *http.Request) (*http.Response, error) {
if crt.compress {
r.Header.Add(headerContentEncoding, "gzip")
raw := r.Body
pr, pw := io.Pipe()
go func() {
defer pw.Close()
gw := gzip.NewWriter(pw)
defer gw.Close()
if n, err := io.Copy(gw, raw); err != nil {
crt.log.Logf("gzip body failed. written: %d, err: %v ", n, err)
}
}()
// set 0 enable Transfer-Encoding:chunked
r.ContentLength = 0
r.Body = pr
}
return crt.r.RoundTrip(r)
}
1
kuro1 2020-03-05 13:23:50 +08:00
这里的 io.copy 倒是让我学到了
|