Variablen in Go-Vorlagenbereichsschleifen: Werden sie bei der Iteration zurückgesetzt?
In Go-Vorlagen werden außerhalb einer Bereichsschleife deklarierte Variablen nicht zurückgesetzt bei jeder Iteration. Allerdings tritt ein Problem auf, wenn einer Variablen innerhalb der Schleife ein neuer Wert zugewiesen wird.
Beachten Sie den folgenden Code:
{{ $prevDate := "" }} {{ range $post := .Posts }} {{ if ne $prevDate $post.Date }} <div>
Die Absicht besteht darin, $prevDate mit dem Datum des aktuellen Beitrags zu vergleichen um festzustellen, ob der Beitrag am selben Tag erfolgt ist. Allerdings scheint $prevDate zu Beginn jeder Schleifeniteration auf einen leeren String zurückgesetzt zu werden.
Der Grund für dieses Verhalten ist, dass die Variable $prevDate innerhalb der Schleife neu deklariert wird. Dadurch wird eine neue Variable erstellt, die nur innerhalb der aktuellen Iteration gültig ist. Die ursprüngliche Variable $prevDate bleibt außerhalb der Schleife unverändert.
Um dieses Problem zu beheben, gibt es zwei mögliche Lösungen:
Lösung Nr. 1: Verwendung einer registrierten Funktion
Sie können eine benutzerdefinierte Funktion registrieren, die den aktuellen Index übernimmt und das Datum des vorherigen Beitrags zurückgibt:
func PrevDate(i int) string { if i == 0 { return "" } return posts[i-1].Date }
Dann in Ihrer Vorlage:
{{range $index, $post := .Posts}} {{$prevDate := PrevDate $index}} ... {{end}}
Lösung Nr. 2: Verwenden einer Methode für Beiträge
Alternativ können Sie Ihrem Beitragstyp eine Methode hinzufügen:
func (p *Posts) PrevDate(i int) string { if i == 0 { return "" } return (*p)[i-1].Date }
In Ihrer Vorlage:
{{range $index, $post := .Posts}} {{$prevDate := $.Posts.PrevDate $index}} ... {{end}}
Das obige ist der detaillierte Inhalt vonWerden die Bereichsschleifenvariablen der Go-Vorlage bei jeder Iteration zurückgesetzt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!