首页 > 后端开发 > Golang > 如何捕获 Go 模板输出并将其分配给变量?

如何捕获 Go 模板输出并将其分配给变量?

Patricia Arquette
发布: 2024-12-23 01:22:09
原创
220 人浏览过

How to Capture Go Template Output and Assign it to a Variable?

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

在 Go 模板中,目标是模拟以下内容:

{{$var := template "my-template"}}
登录后复制

但是,这种方法会导致错误“unexpected

解决方案

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板