Heim > Backend-Entwicklung > Golang > Werden die Bereichsschleifenvariablen der Go-Vorlage bei jeder Iteration zurückgesetzt?

Werden die Bereichsschleifenvariablen der Go-Vorlage bei jeder Iteration zurückgesetzt?

DDD
Freigeben: 2024-12-21 02:20:10
Original
884 Leute haben es durchsucht

Do Go Template Range Loop Variables Reset on Each Iteration?

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>
Nach dem Login kopieren

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
}
Nach dem Login kopieren

Dann in Ihrer Vorlage:

{{range $index, $post := .Posts}}
    {{$prevDate := PrevDate $index}}
    ...
{{end}}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

In Ihrer Vorlage:

{{range $index, $post := .Posts}}
    {{$prevDate := $.Posts.PrevDate $index}}
    ...
{{end}}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage