可能是一个简单的问题,但是我遇到了在请求处理程序函数中延迟输出的问题。当我执行模板而不是响应编写器时,我正在使用“bufio”进行写入,但似乎缓冲区只能吐出很多东西才能将其吐出。我担心它会吐出页面的一部分,然后遇到错误,留下不完整且难以理解的响应。确保一切保持缓冲直到准备好释放到野外的最佳策略是什么?
最佳答案
如果要完全缓冲输出,请使用bytes.Buffer
代替,例如:
var bufferPool = &sync.Pool{
New: func() interface{} {
return &bytes.Buffer{}
},
}
func getBuffer() (buf *bytes.Buffer) {
return bufferPool.Get().(*bytes.Buffer)
}
func putBuffer(buf *bytes.Buffer) {
buf.Reset()
bufferPool.Put(buf)
}
func handler(w http.ResponseWriter, req *http.Request) {
buf := getBuffer()
defer putBuffer(buf)
//....
fmt.Fprintf(buf, .....)
buf.WriteTo(w)
}
关于templates - 在所有错误检查完成之前,如何防止在Go中生成输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25731953/