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
Susan Sarandonoriginal
2024-12-27 01:14:10284parcourir

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>

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
}

Ensuite, utilisez la fonction dans le modèle :

{{range $index, $post := .Posts}}
    {{$prevDate := PrevDate $index}}
{{end}}

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
}

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

{{range $index, $post := .Posts}}
    {{$prevDate := $.Posts.PrevDate $index}}
{{end}}

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!

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