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