可能是一个简单的问题,但是我遇到了在请求处理程序函数中延迟输出的问题。当我执行模板而不是响应编写器时,我正在使用“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/

10-13 04:59