假设我有以下的 html/template
:
<html>
<body>
<p>{{SomeFunc .SomeData}}</p>
</body>
有时候SomeFunc
会返回一个错误。有没有惯用的方法来处理这个问题?
如果我直接写入ResponseWriter
,那么在遇到错误之前,状态码200已经被写入了。
var tmpl *template.Template
func Handler(w http.ResponseWriter, r *http.Request) {
err := tmpl.Execute(w, data)
// "<html><body><p>" has already been written...
// what to do with err?
}
最好返回状态码400或类似的,但如果我直接在ResponseWriter
上使用template.Execute
,我看不到实现这一点的方法。我有什么遗漏吗?
sync.Pool
或其他结构来实现缓冲池是一个稍微更高效的解决方案。分配一个池,获取一个缓冲区,向其写入内容再将其响应输出(在没有错误的情况下),然后将缓冲区放回池中。除此之外,你说得很对! - elithrar