在完成所有错误检查之前,如何防止在Go中生成输出?

mee*_*son 0 error-handling buffer templates go

可能是一个简单的问题,但我在延迟请求处理函数中的输出时遇到问题.当我执行我的模板而不是响应编写器时,我正在使用"bufio"写入,但似乎缓冲区只能在它吐出来之前保持这么多.我担心它会吐出部分页面,然后遇到错误,留下不完整和难以理解的响应.什么是确保一切都保持缓冲直到它准备好被释放到野外的最佳策略?

One*_*One 6

如果你想完全缓冲输出使用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)
}
Run Code Online (Sandbox Code Playgroud)

  • 对于`sync.Pool`来说,这是一个很好的例子.谢谢! (2认同)