Maison >développement back-end >Golang >Les variables de boucle de plage de modèle Go sont-elles réinitialisées à chaque itération ?
Variables dans les boucles de plage de modèles Go : sont-elles réinitialisées lors de l'itération ?
Dans les modèles Go, les variables déclarées en dehors d'une boucle de plage ne sont pas réinitialisées à chaque itération. Cependant, un problème survient lors de l'attribution d'une nouvelle valeur à une variable dans la boucle.
Considérez le code suivant :
{{ $prevDate := "" }} {{ range $post := .Posts }} {{ if ne $prevDate $post.Date }} <div>
L'intention est de comparer le $prevDate à la date de la publication actuelle. pour déterminer si le message a eu lieu le même jour. Cependant, $prevDate semble être réinitialisé à une chaîne vide au début de chaque itération de boucle.
La raison de ce comportement est que la variable $prevDate est redéclarée dans la boucle. Cela crée une nouvelle variable qui n'a de portée que dans l'itération en cours. La variable $prevDate d'origine reste inchangée en dehors de la boucle.
Pour résoudre ce problème, il existe deux solutions possibles :
Solution n°1 : Utiliser une fonction enregistrée
Vous pouvez enregistrer une fonction personnalisée qui prend l'index actuel et renvoie la date de la publication précédente :
func PrevDate(i int) string { if i == 0 { return "" } return posts[i-1].Date }
Ensuite, dans votre modèle :
{{range $index, $post := .Posts}} {{$prevDate := PrevDate $index}} ... {{end}}
Solution n°2 : Utiliser une méthode de publications
Vous pouvez également ajouter une méthode à votre type de publications :
func (p *Posts) PrevDate(i int) string { if i == 0 { return "" } return (*p)[i-1].Date }
Dans votre modèle :
{{range $index, $post := .Posts}} {{$prevDate := $.Posts.PrevDate $index}} ... {{end}}
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!