Heim > Backend-Entwicklung > Golang > Wie erkennt man das letzte Element in einem Go-Vorlagenbereich?

Wie erkennt man das letzte Element in einem Go-Vorlagenbereich?

Linda Hamilton
Freigeben: 2024-11-08 06:24:01
Original
1087 Leute haben es durchsucht

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

Erkennen des letzten Elements in einem Vorlagenbereich

In Go-Vorlagen ermöglicht das Durchlaufen von Arrays oder Slices mithilfe der Bereichsaktion einen bequemen Zugriff auf Array-Elemente. Manchmal ist es jedoch notwendig, die letzte Iteration von den anderen zu unterscheiden.

Stellen Sie sich eine Vorlage vor, die eine eindeutige Formatierung für das letzte Element in einem Bereich erfordert:

{{range $i, $e := .SomeField}}
  {{if $i}}, {{end}}
  $e.TheString
{{end}}
Nach dem Login kopieren

Diese Vorlage würde eine Ausgabe generieren wie:

one, two, three
Nach dem Login kopieren

Um dieses Verhalten zu ändern und „und“ vor dem letzten Element auszugeben:

one, two, and three
Nach dem Login kopieren

man muss Bestimmen Sie, welches Element im Bereich das letzte ist.

Obwohl es möglich ist, die Länge des Arrays außerhalb der Vorlage zu verfolgen, würde diese Methode zu einem statischen Wert führen, der Änderungen in der Länge des Arrays nicht berücksichtigt.

Die Lösung liegt in der Nutzung der Funktionsinjektionsfunktionen von Go für Vorlagen. Durch die Definition einer benutzerdefinierten Funktion wird es möglich, das letzte Element dynamisch zu identifizieren:

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)
}
Nach dem Login kopieren

Dieser Ansatz nutzt Reflektion, um die Länge des Arrays dynamisch zu bestimmen und sie mit dem aktuellen Index $i zu vergleichen. Wenn der Index mit der Array-Länge minus eins übereinstimmt, gibt die letzte Funktion „true“ zurück und gibt an, dass das aktuelle Element das letzte im Bereich ist.

Alternativ kann man auch die len-Funktion ohne Reflektion verwenden:

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)
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erkennt man das letzte Element in einem Go-Vorlagenbereich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage