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

如何将 Golang 模板输出分配给变量?

Barbara Streisand
发布: 2025-01-03 16:10:42
原创
248 人浏览过

How to Assign Golang Template Output to a Variable?

如何捕获 Golang 模板输出或将其分配给变量

在 Go 中,您可以定义和执行可以动态生成 HTML 或其他文本格式的模板。人们可能想要捕获模板的输出并将其分配给变量。

问题

使用 Go 的内置模板语言无法直接实现这一点。尝试这样做,如下例所示,将导致“操作数中出现意外的”错误:

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

解决方案

要绕过此限制,您可以注册检索模板输出的自定义函数。操作方法如下:

  • 注册自定义函数:
var t *template.Template

// execTempl retrieves the output of a named template.
func execTempl(name string) (string, error) {
    buf := &bytes.Buffer{}  // Create a buffer to store the template output.
    err := t.ExecuteTemplate(buf, name, nil)  // Execute the template into the buffer.
    return buf.String(), err
}
登录后复制
  • 将函数与模板:
t = template.Must(template.New("").Funcs(template.FuncMap{
    "execTempl": execTempl,
}).Parse(tmpl))
登录后复制
  • 执行模板并捕获输出:
if err := t.Execute(os.Stdout, nil); err != nil {
    panic(err)
}
登录后复制
  • 使用捕获的输出:

在模板中,您可以使用注册的“execTempl”函数来检索命名模板的输出并将其分配给变量:

const tmpl = `{{define "my-template"}}my-template content{{end}}
See result:
{{$var := execTempl "my-template"}}
{{$var}}
`
登录后复制

示例

这是一个完整的示例,演示了此方法的用法技术:

package main

import (
    "bytes"
    "fmt"
    "os"
    "text/template"
)

const tmpl = `{{define "my-template"}}my-template content{{end}}
See result:
{{$var := execTempl "my-template"}}
{{$var}}
`

func main() {
    execTempl := func(name string) (string, error) {
        buf := &bytes.Buffer{}
        err := t.ExecuteTemplate(buf, name, nil)
        return buf.String(), err
    }

    t := template.Must(template.New("").Funcs(template.FuncMap{
        "execTempl": execTempl,
    }).Parse(tmpl))

    if err := t.Execute(os.Stdout, nil); err != nil {
        fmt.Println(err)
    }
}
登录后复制

运行上述程序将产生以下输出:

See result:
my-template content
登录后复制

通过使用此技术,您可以捕获任意模板的输出并将其存储在变量中以供进一步使用处理或呈现。

以上是如何将 Golang 模板输出分配给变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

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