真的很喜欢这个功能,小巧精悍。最近在一个项目中用到了,大概是这样的:
项目中有一个自定义的 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)
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.