3 回答
TA贡献2080条经验 获得超4个赞
bytes.Buffer有一个Bytes方法,因此您实际上不需要调用String并将其转换为[]byte:
w.Write(buf.Bytes())
此外,将错误写入 stderr 是一种很好的做法。只需将您的替换fmt为log:
if err != nil {
log.Println(err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
TA贡献1880条经验 获得超4个赞
bytes.Buffer有一个内置的方法来写出一个io.Writer:
func get_handler(w http.ResponseWriter, r *http.Request) {
buf := new(bytes.Buffer)
//fill buffer
_,err := buf.WriteTo(w)
if err != nil {
log.Println(err)
}
}
文档:http : //golang.org/pkg/bytes/#Buffer.WriteTo
TA贡献1844条经验 获得超8个赞
您可以bytes.Buffer通过写入“原样”来使用它,但代价是在每个请求上都丢弃缓冲区。
使用池化方法(在使用之间安全地重置内容,但保留缓冲区)可以获得一些收益:
var bufPool *bpool.BufferPool
func YourHandler(w http.ResponseWriter, r *http.Request) {
buf := bufPool.Get()
defer bufPool.Put(buf)
err := template.ExecuteTemplate(buf, "forms/create.html", user)
// or err := json.NewEncoder(buf).Encode(value)
if err != nil {
return err
}
buf.WriteTo(w)
}
这使用bpool库。
- 3 回答
- 0 关注
- 171 浏览
添加回答
举报