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
DDDOriginal
2024-12-21 02:20:10956Durchsuche

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>

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!

Stellungnahme:
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