为什么未关闭的html标记会使html模板无法呈现?

时间:2015-03-14 15:44:15

标签: go go-html-template

我遇到了一个非常麻烦的问题,我花了大约一个小时来确定导致问题的原因,但我不知道为什么:

我正在使用html/template来修改网页,代码如下:

t, _ := template.parseFiles("template/index.tmpl")
...
t.Execute(w, modelView) // w is a http.ResponseWriter and modelView is a data struct.

但无意识地,我犯了一个错误,让<textarea>标签打开:

<html>
<body>
        <form id="batchAddUser" class="form-inline">
        **this one**  -->  <textarea name="users" value="" row=3 placeholder="input username and password splited by space">
            <button type="submit" class="btn btn-success" >Add</button>
        </form>
</body>
</html>

然后Go没有提供任何异常和其他提示,但只是给出一个没有任何内容的空白页面,状态代码为200

由于没有提供任何信息,因此找到了解决问题的效果,但为什么会发生这种情况?一个未着色的标签怎么会引起这样的问题呢?以及如何调试?

2 个答案:

答案 0 :(得分:6)

它告诉你错误,你只是忽略它。

如果你看一下Execute返回的错误,它会告诉你你的html是坏的。

您应该始终检查错误。类似的东西:

t, err := template.New("test").Parse(ttxt)
if err != nil { 
    ...do something with error...
}
err = t.Execute(os.Stdout, nil) // w is a http.R
if err != nil { 
    ...do something with error...
}

这是Playground

上的(有错误打印)

此处固定在Playground

答案 1 :(得分:3)

Go的模板包提供方法Must,如果出现此类错误,会使您的程序fail fast感到恐慌。您可以释放一些错误检查的代码,但您仍然可以控制。

t := template.Must(template.parseFiles("template/index.tmpl"))