Maison >développement back-end >Golang >Comment détecter le dernier élément d'une plage de modèles dans Go ?

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

Patricia Arquette
Patricia Arquetteoriginal
2024-11-09 03:46:02600parcourir

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}}

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!

Déclaration:
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