Heim > Backend-Entwicklung > Golang > Wie verwaltet man den Variablenbereich in den Bereichsschleifen von Go-Vorlagen richtig?

Wie verwaltet man den Variablenbereich in den Bereichsschleifen von Go-Vorlagen richtig?

Susan Sarandon
Freigeben: 2024-12-27 01:14:10
Original
227 Leute haben es durchsucht

How to Properly Manage Variable Scope in Go Templates' Range Loops?

Variablenbereich einer Bereichsschleife in Go-Vorlagen

Bei Go-Vorlagen ist es wichtig zu verstehen, wie innerhalb einer Bereichsschleife deklarierte Variablen mit deklarierten Variablen interagieren außerhalb der Schleife.

Betrachten Sie den folgenden Codeausschnitt:

{{ $prevDate := "" }}
{{ range $post := .Posts }}
  {{ if ne $prevDate $post.Date }}
    <div>
Nach dem Login kopieren

Der Ziel ist es, das Datum des aktuellen Beitrags mit dem Datum des vorherigen Beitrags zu vergleichen, um eine Abschnittsüberschrift anzuzeigen, wenn sich das Datum ändert. Allerdings scheint der Wert von $prevDate zu Beginn jeder Iteration auf eine leere Zeichenfolge zurückgesetzt zu werden.

Das Problem liegt im Bereich der Variablen innerhalb der Bereichsschleife. Bei jeder Iteration der Schleife wird eine neue schattierte Variable $prevDate erstellt. Dies bedeutet, dass der außerhalb der Schleife deklarierte Wert von $prevDate nicht geändert wird, während die schattierte Variable innerhalb der Schleife geändert wird.

Daher kann das Problem durch die Verwendung der folgenden Alternativen gelöst werden:

Lösung #1: Registrierte Funktion

Registrieren Sie eine Funktion, die den aktuellen Index übernimmt und ggf. das Datum des vorherigen Beitrags zurückgibt verfügbar:

func PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return posts[i-1].Date
}
Nach dem Login kopieren

Dann verwenden Sie die Funktion in der Vorlage:

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

Lösung Nr. 2: Methode des Beitragstyps

Hinzufügen eine Methode für den Typ „Beiträge“, um das vorherige Datum abzurufen:

func (p *Posts) PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return (*p)[i-1].Date
}
Nach dem Login kopieren

Verwenden Sie dann die Methode im Vorlage:

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

Durch die Verwendung dieser Lösungen kann die Variable $prevDate ihren Wert über Iterationen der Bereichsschleife hinweg beibehalten, sodass Sie Postdaten effektiv vergleichen können.

Das obige ist der detaillierte Inhalt vonWie verwaltet man den Variablenbereich in den Bereichsschleifen von Go-Vorlagen richtig?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage