Maison > développement back-end > Golang > le corps du texte

Comment détecter le dernier élément d'une plage de modèles dans Go ?

Patricia Arquette
Libérer: 2024-11-09 03:46:02
original
509 Les gens l'ont consulté

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

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}}
Copier après la connexion

Ce modèle produit une sortie telle que :

one, two, three
Copier après la connexion

Cependant, si vous souhaitez modifier la sortie pour qu'elle soit :

one, two, and three
Copier après la connexion
Copier après la connexion

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
    },
}
Copier après la connexion

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}}.`
Copier après la connexion

Ce modèle produira le résultat souhaité de :

one, two, and three
Copier après la connexion
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal