Détection du dernier élément dans une plage de modèles
Lorsque vous travaillez avec des modèles, vous pouvez rencontrer des situations dans lesquelles vous devez déterminer le dernier élément dans une gamme. Cela peut être particulièrement utile lorsque vous souhaitez personnaliser la sortie en fonction de la position de l'élément actuel.
Considérez le modèle suivant :
{{range $i, $e := .SomeField}} {{if $i}}, {{end}} $e.TheString {{end}}
Ce modèle produit une sortie telle que :
one, two, three
Cependant, si vous souhaitez modifier la sortie pour qu'elle soit :
one, two, and three
Vous avez besoin d'un moyen de détecter que l'élément actuel est le dernier élément de la plage.
Implémentation
L'approche traditionnelle consistant à utiliser des variables pour stocker la longueur du tableau et l'index actuel ne fonctionne pas efficacement dans les modèles. Heureusement, il existe une solution utilisant des fonctions de modèle personnalisées :
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 }, }
Cette fonction vérifie si l'index x fourni est égal à la longueur du tableau a moins 1, indiquant qu'il s'agit du dernier élément.
Utilisation
Pour utiliser cette fonction dans votre modèle, vous pouvez l'invoquer comme suit :
{{range $i, $e := .}}{{if $i}}, {{end}}{{if last $i $}}and {{end}}{{$e}}{{end}}.`
Ce modèle produira le résultat souhaité de :
one, two, and three
Optimisation supplémentaire
Vous pouvez également utiliser la fonction objectif sans réflexion pour obtenir le même résultat, améliorant encore l'efficacité de cette solution.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!