Si utilizza l'operatore e l'ordine di argomenti errati. Devi scrivere prima l'operatore e poi gli operandi:
{{if eq (index $n 0) (index $n 1)}}
Questo è più leggibile e maneggevole come eq
può prendere più di appena 2 argomenti, in modo da poter scrivere ad esempio:
{{if eq (index $n 0) (index $n 1) (index $n 2)}}
Per semplificare i test di uguaglianza multipla, eq (solo) accetta due o più argomenti e confronta il secondo e il successivo, restituendo l'effetto
arg1==arg2 || arg1==arg3 || arg1==arg4 ...
(A differenza di || in Go, tuttavia, eq è una chiamata di funzione e tutti gli argomenti saranno valutati)
Con questa modifica l'uscita (provate sul Go Playground):.
1 != 2
2 = 2
4 != 2
Nota:
non è necessario introdurre una variabile di "loop", l'azione {{range}}
cambia il punto per la voce corrente:
... dot è impostato per gli elementi successivi della serie, fetta, o MAP ...
in modo da poter semplificare il modello, questo è equivalente a vostra:
{{range .}}
{{index . 0}} {{if eq (index . 0) (index . 1)}}={{else}}!={{end}} {{index . 1}}
{{end}}
Si noti inoltre che è possibile creare variabili nel modello dall'utente, che è consigliabile se si utilizza la stessa espressione più volte che è non banale (come index . 0
).Questo è anche equivalente al modello:
{{range .}}{{$0 := index . 0}}{{$1 := index . 1}}
{{$0}} {{if eq $0 $1}}={{else}}!={{end}} {{$1}}
{{end}}
Si noti inoltre che in questo caso specifico, dal momento che le cose che si vogliono in uscita nelle if
e else
rami contengono entrambi il segno =
, non hai bisogno di 2 rami, =
deve essere emesso in entrambi i casi, è sufficiente un ulteriore segno !
se non sono uguali. Quindi il seguente modello finale equivale anche al tuo:
{{range .}}{{$0 := index . 0}}{{$1 := index . 1}}
{{$0}} {{if ne $0 $1}}!{{end}}= {{$1}}
{{end}}