在 Go 中捕获模板输出
在 Go 模板中,捕获子模板的输出或直接将其分配给变量是默认不支持。不过,这可以通过注册自定义函数并使用字节缓冲区接收模板的结果来实现。
自定义函数注册
要捕获模板输出,请注册Template.Funcs() 的函数将模板名称作为参数并以字符串形式返回模板的输出:
func execTempl(name string) (string, error) { buf := &bytes.Buffer{} err := t.ExecuteTemplate(buf, name, nil) return buf.String(), err }
模板执行和结果捕获
使用 Template.ExecuteTemplate() 执行名为 'my-template' 的子模板并将其分配给变量:
{{$var := execTempl "my-template"}}
输出检索
检索捕获的输出并根据需要使用它:
See result: {{$var}}
完整示例
var t *template.Template 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}} `
输出:
See result: my-template content
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3