在 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) }
使用擷取的輸出:
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中文網其他相關文章!