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>
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 }
Dann verwenden Sie die Funktion in der Vorlage:
{{range $index, $post := .Posts}} {{$prevDate := PrevDate $index}} {{end}}
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 }
Verwenden Sie dann die Methode im Vorlage:
{{range $index, $post := .Posts}} {{$prevDate := $.Posts.PrevDate $index}} {{end}}
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!