template.Execute() 与 template.ExecuteTemplate()

以下代码生成错误:


panic: template: body: "body" is an incomplete or empty template

//go:embed resources/*

var res embed.FS


func main() {

    root, _ := fs.Sub(res, "resources")

    t, err := template.New("body").ParseFS(root, "home.html")

    assert(err)

    assert(t.Execute(os.Stdout, nil))

}

模板文件resources/home.html非常简单:


{{define "body"}}

Hello World!

{{end}}

如果我将 main() 的最后一行更改为t.ExecuteTemplate(os.Stdout, "body", nil),问题就消失了。


从库源代码中,我注意到错误是因为:


func (t *Template) execute(wr io.Writer, data interface{}) (err error) {

    ... ...

    if t.Tree == nil || t.Root == nil {

        state.errorf("%q is an incomplete or empty template", t.Name())

    }

    ... ...

}

但是为什么 t.Tree或者t.Root是nil?我的版本是:


go version go1.17.5 linux/amd64


ABOUTYOU
浏览 169回答 1
1回答

三国纷争

我发现了问题。VSCode 自动text/template为我导入。此包将无法正确解析{{define "..."}}指令。使用html/template工作正常。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go