在golang中处理模板错误的惯用方法
发布时间:2020-12-16 19:23:26 所属栏目:大数据 来源:网络整理
导读:假设我有一个如下所示的html /模板: htmlbody p{{SomeFunc .SomeData}}/p/body 有时SomeFunc会返回错误.有没有惯用的方法来解决这个问题? 如果我直接写入ResponseWriter,则在遇到错误之前已经写入了状态代码200. var tmpl *template.Templatefunc Handler(
假设我有一个如下所示的html /模板:
<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,我就看不到这样做的方法.有什么我想念的吗?
由于模板引擎即时生成输出,因此SomeFunc调用之前的模板部分已经发送到输出.如果输出未缓冲,则可能已经发送了它们(以及HTTP 200状态).
你无能为力. 你可以做的是在调用 如果这还不够或您无法控制它,您可以创建一个 这看起来像这样: buf := &bytes.Buffer{} err := tmpl.Execute(buf,data) if err != nil { // Send back error message,for example: http.Error(w,"Hey,Request was bad!",http.StatusBadRequest) // HTTP 400 status } else { // No error,send the content,HTTP 200 response status implied buf.WriteTo(w) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容