Mengesan Item Terakhir dalam Julat Templat
Templat In Go, mengulangi tatasusunan atau kepingan menggunakan tindakan julat membolehkan akses mudah kepada elemen tatasusunan. Walau bagaimanapun, kadangkala ia menjadi perlu untuk membezakan lelaran terakhir daripada yang lain.
Pertimbangkan templat yang memerlukan pemformatan berbeza untuk elemen terakhir dalam julat:
{{range $i, $e := .SomeField}} {{if $i}}, {{end}} $e.TheString {{end}}
Templat ini akan menjana output seperti:
one, two, three
Untuk mengubah suai tingkah laku dan output ini "dan" sebelum elemen terakhir:
one, two, and three
seseorang perlu menentukan elemen mana dalam julat yang terakhir.
Walaupun mungkin untuk menjejaki panjang tatasusunan di luar templat, kaedah ini akan menghasilkan nilai statik yang tidak mengambil kira perubahan dalam panjang tatasusunan.
Penyelesaian terletak pada memanfaatkan suntikan fungsi Go keupayaan untuk templat. Dengan mentakrifkan fungsi tersuai, ia menjadi boleh dilaksanakan untuk mengenal pasti elemen terakhir secara dinamik:
package main import ( "os" "reflect" "text/template" ) var fns = template.FuncMap{ "last": func(x int, a interface{}) bool { return x == reflect.ValueOf(a).Len() - 1 }, } func main() { t := template.Must(template.New("abc").Funcs(fns).Parse(`{{range $i, $e := .}}{{if $i}}, {{end}}{{if last $i $}}and {{end}}{{$e}}{{end}}.`)) a := []string{"one", "two", "three"} t.Execute(os.Stdout, a) }
Pendekatan ini menggunakan pantulan untuk menentukan panjang tatasusunan secara dinamik dan membandingkannya dengan indeks semasa $i. Apabila indeks sepadan dengan panjang tatasusunan tolak satu, fungsi terakhir akan kembali benar, menunjukkan bahawa elemen semasa adalah yang terakhir dalam julat.
Sebagai alternatif, seseorang juga boleh menggunakan fungsi len tanpa pantulan:
package main import ( "os" "text/template" ) func main() { t := template.Must(template.New("abc").Parse(`{{range $i, $e := .}}{{if $i}}, {{end}}{{if len .}}and {{end}}{{$e}}{{end}}.`)) a := []string{"one", "two", "three"} t.Execute(os.Stdout, a) }
Atas ialah kandungan terperinci Bagaimana untuk Mengesan Item Terakhir dalam Julat Templat Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!