Bagaimana untuk Mengesan Item Terakhir dalam Julat Templat Go?

Linda Hamilton
Lepaskan: 2024-11-08 06:24:01
asal
1042 orang telah melayarinya

How to Detect the Last Item in a Go Template Range?

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}}
Salin selepas log masuk

Templat ini akan menjana output seperti:

one, two, three
Salin selepas log masuk

Untuk mengubah suai tingkah laku dan output ini "dan" sebelum elemen terakhir:

one, two, and three
Salin selepas log masuk

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan