Sie verwenden falsche Operator- und Argumentreihenfolge. Sie müssen zuerst den Operator schreiben und dann die Operanden:
{{if eq (index $n 0) (index $n 1)}}
Dies ist besser lesbar und handlich wie eq
mehr als nur zwei Argumente nehmen kann, so könnten Sie zum Beispiel schreiben:
{{if eq (index $n 0) (index $n 1) (index $n 2)}}
Für einfachere Mehrweg-Gleichheitsprüfungen akzeptiert eq (nur) zwei oder mehr Argumente und vergleicht das zweite und das folgende mit dem ersten und gibt in der Folge
arg1==arg2 || arg1==arg3 || arg1==arg4 ...
zurück
(Im Gegensatz zu || in Go ist jedoch eq ein Funktionsaufruf und alle Argumente bewertet werden)
Mit dieser Änderung der Ausgang (versuchen Sie es auf dem Go Playground).
1 != 2
2 = 2
4 != 2
Hinweis:
Sie sind nicht eine „Schleife“ Variable einzuführen erforderlich, die {{range}}
Aktion den Punkt auf das aktuelle Element ändert:
... Punkt zu den aufeinanderfolgenden Elemente des Arrays, Scheibe festgelegt ist, oder eine Karte ...
So können Sie Ihre Vorlage vereinfachen, ist dies gleichbedeutend mit Ihnen:
{{range .}}
{{index . 0}} {{if eq (index . 0) (index . 1)}}={{else}}!={{end}} {{index . 1}}
{{end}}
Beachten Sie auch, dass Sie Variablen in der Vorlage selbst erstellen können. Dies wird empfohlen, wenn Sie denselben Ausdruck mehrfach verwenden, der nicht trivial ist (z. B. index . 0
).Dies ist auch gleichbedeutend mit Ihrer Vorlage:
{{range .}}{{$0 := index . 0}}{{$1 := index . 1}}
{{$0}} {{if eq $0 $1}}={{else}}!={{end}} {{$1}}
{{end}}
auch beachten, dass in diesem speziellen Fall, da die Dinge, die Sie ausgeben möchten in den if
und else
Zweige sowohl die =
Zeichen enthalten, brauchen Sie nicht 2 Zweige, =
muss in beiden Fällen ausgegeben werden, Sie brauchen nur ein extra !
Zeichen, wenn sie nicht gleich sind. Die folgende endgültige Vorlage entspricht also Ihrer:
{{range .}}{{$0 := index . 0}}{{$1 := index . 1}}
{{$0}} {{if ne $0 $1}}!{{end}}= {{$1}}
{{end}}