Maison > développement back-end > Golang > Comment gérer correctement la portée des variables dans les boucles de plage des modèles Go ?

Comment gérer correctement la portée des variables dans les boucles de plage des modèles Go ?

Susan Sarandon
Libérer: 2024-12-27 01:14:10
original
227 Les gens l'ont consulté

How to Properly Manage Variable Scope in Go Templates' Range Loops?

Portée des variables de boucle de plage dans les modèles Go

Dans les modèles Go, il est important de comprendre comment les variables déclarées dans une boucle de plage interagissent avec les variables déclarées en dehors de la boucle.

Considérez l'extrait de code suivant :

{{ $prevDate := "" }}
{{ range $post := .Posts }}
  {{ if ne $prevDate $post.Date }}
    <div>
Copier après la connexion

Le L'objectif est de comparer la date de la publication actuelle avec la date de la publication précédente pour afficher un en-tête de section lorsque la date change. Cependant, la valeur de $prevDate semble être réinitialisée à une chaîne vide au début de chaque itération.

Le problème réside dans la portée des variables dans la boucle de plage. Chaque itération de la boucle crée une nouvelle variable masquée $prevDate. Cela signifie que la valeur de $prevDate déclarée en dehors de la boucle n'est pas modifiée, tandis que la variable masquée est modifiée dans la boucle.

Par conséquent, le problème peut être résolu en utilisant les alternatives suivantes :

Solution n°1 : Fonction enregistrée

Enregistrez une fonction qui prend l'index actuel et renvoie la date de la publication précédente, si disponible :

func PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return posts[i-1].Date
}
Copier après la connexion

Ensuite, utilisez la fonction dans le modèle :

{{range $index, $post := .Posts}}
    {{$prevDate := PrevDate $index}}
{{end}}
Copier après la connexion

Solution n°2 : Méthode de type de publication

Ajouter une méthode au type Posts pour obtenir la date précédente :

func (p *Posts) PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return (*p)[i-1].Date
}
Copier après la connexion

Ensuite, utilisez la méthode dans le modèle :

{{range $index, $post := .Posts}}
    {{$prevDate := $.Posts.PrevDate $index}}
{{end}}
Copier après la connexion

En utilisant ces solutions, la variable $prevDate peut conserver sa valeur à travers les itérations de la boucle de plage, vous permettant de comparer efficacement les dates de publication.

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