在 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}} `在範本中,您可以使用已註冊的「execTempl」函數來擷取命名範本的輸出並將其指派給變數:
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中文網其他相關文章!