在 Go 模板中,目标是模拟以下内容:
{{$var := template "my-template"}}
但是,这种方法会导致错误“unexpected in”操作数。”
Go 没有提供内置方法来捕获模板执行结果。相反,注册一个执行此任务的函数。
使用 Template.Funcs() 函数来注册函数。使用 Template.ExecuteTemplate() 执行命名模板,并使用 bytes.Buffer 作为目标,将直接模板执行结果捕获到缓冲区中。
package main import ( "bytes" "html/template" "log" "os" ) var t *template.Template func execTempl(name string) (string, error) { buf := &bytes.Buffer{} err := t.ExecuteTemplate(buf, name, nil) return buf.String(), err } func main() { t = template.Must(template.New("").Funcs(template.FuncMap{ "execTempl": execTempl, }).Parse(tmpl)) if err := t.Execute(os.Stdout, nil); err != nil { log.Fatal(err) } } const tmpl = `{{define "my-template"}}my-template content{{end}} See result: {{$var := execTempl "my-template"}} {{$var}} `
使用注册的 execTempl() 函数执行“my-template”模板。将结果存储在 $var 模板变量中,然后可以将其添加到输出或传递给其他函数。
See result: my-template content
请注意,输出捕获 " my-template”模板并将其显示在主模板中。
以上是如何捕获 Go 模板输出并将其分配给变量?的详细内容。更多信息请关注PHP中文网其他相关文章!