Dalam Go, anda boleh mentakrif dan melaksanakan templat yang boleh menjana HTML atau format teks lain secara dinamik. Seseorang mungkin ingin menangkap output templat dan menetapkannya kepada pembolehubah.
Ini tidak boleh dilakukan secara langsung menggunakan bahasa templat terbina dalam Go. Percubaan untuk berbuat demikian, seperti dalam contoh berikut, akan mengakibatkan ralat dalam operan yang tidak dijangka:
{{$var := template "my-template"}}
Untuk memintas had ini, anda boleh mendaftar fungsi tersuai yang mendapatkan semula output templat. Begini cara untuk melakukannya:
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) }
Dalam anda templat, anda boleh menggunakan fungsi "execTempl" yang didaftarkan untuk mendapatkan semula output templat bernama dan menetapkannya kepada pembolehubah:
const tmpl = `{{define "my-template"}}my-template content{{end}} See result: {{$var := execTempl "my-template"}} {{$var}} `
Berikut ialah contoh lengkap yang menunjukkan penggunaan teknik ini:
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) } }
Menjalankan program di atas akan menghasilkan yang berikut output:
See result: my-template content
Dengan menggunakan teknik ini, anda boleh menangkap output templat sewenang-wenangnya dan menyimpannya dalam pembolehubah untuk pemprosesan atau pembentangan selanjutnya.
Atas ialah kandungan terperinci Bagaimana untuk menetapkan Output Templat Golang kepada Pembolehubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!