Erkennen des letzten Elements in einem Vorlagenbereich
Beim Arbeiten mit Vorlagen kann es vorkommen, dass Sie das letzte Element in einem Vorlagenbereich bestimmen müssen eine Reichweite. Dies kann besonders nützlich sein, wenn Sie die Ausgabe basierend auf der Position des aktuellen Elements anpassen möchten.
Betrachten Sie die folgende Vorlage:
{{range $i, $e := .SomeField}} {{if $i}}, {{end}} $e.TheString {{end}}
Diese Vorlage erzeugt eine Ausgabe wie:
one, two, three
Wenn Sie die Ausgabe jedoch folgendermaßen ändern möchten:
one, two, and three
Sie benötigen eine Möglichkeit, zu erkennen, dass das aktuelle Element das letzte Element im Bereich ist.
Implementierung
Der traditionelle Ansatz, Variablen zum Speichern der Array-Länge und des aktuellen Index zu verwenden, funktioniert in Vorlagen nicht effektiv. Glücklicherweise gibt es eine Lösung mit benutzerdefinierten Vorlagenfunktionen:
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 }, }
Diese Funktion prüft, ob der bereitgestellte Index x gleich der Länge des Arrays a minus 1 ist, was anzeigt, dass es das letzte Element ist.
Verwendung
Um diese Funktion in Ihrer Vorlage zu verwenden, können Sie sie wie folgt aufrufen:
{{range $i, $e := .}}{{if $i}}, {{end}}{{if last $i $}}and {{end}}{{$e}}{{end}}.`
Diese Vorlage erzeugt die gewünschte Ausgabe von:
one, two, and three
Zusätzliche Optimierung
Sie können alternativ die Len-Funktion ohne Reflexion verwenden, um das gleiche Ergebnis zu erzielen und so die Effizienz dieser Lösung weiter zu steigern.
Das obige ist der detaillierte Inhalt vonWie erkennt man das letzte Element in einem Vorlagenbereich in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!