捕获或将golang模板输出分配给变量

bit*_*nfo 2 go go-templates

在模板中,我该如何实现这一目标?

{{$var := template "my-template"}}
Run Code Online (Sandbox Code Playgroud)

我得到了"unexpected <template> in operand".

icz*_*cza 5

获取模板执行结果没有"内置"操作,但您可以通过注册执行此操作的函数来执行此操作.

您可以使用该Template.Funcs()函数注册函数,您可以执行命名模板,Template.ExecuteTemplate()您可以使用a bytes.Buffer作为目标(将模板执行结果直接导入缓冲区).

这是一个完整的例子:

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 {
        panic(err)
    }
}

const tmpl = `{{define "my-template"}}my-template content{{end}}
See result:
{{$var := execTempl "my-template"}}
{{$var}}
`
Run Code Online (Sandbox Code Playgroud)

输出(在Go Playground上试试):

See result:

my-template content
Run Code Online (Sandbox Code Playgroud)

"my-template"模板是由注册的功能执行execTempl(),并返回结果为string,存储在$var模板变量,然后简单地添加到输出,但是你可以用它来传递给其他的功能,如果你想.

  • jfc,真是一团糟,哈哈,真的是golang吗?哈哈 (2认同)