Вы используете неправильный оператор и порядок аргументов. Вы должны сначала написать оператору, а затем операнды:
{{if eq (index $n 0) (index $n 1)}}
Это более читаемым и удобным, как eq
может занять больше, чем просто 2 аргументов, так что вы могли бы написать, например:
{{if eq (index $n 0) (index $n 1) (index $n 2)}}
Для более простых многоуровневых тестов на равенство eq (only) принимает два или более аргумента и сравнивает второй и последующий с первым, возвращается в действии
arg1==arg2 || arg1==arg3 || arg1==arg4 ...
(В отличие от || в Go, однако, эк вызов функции и все аргументы будут оценены)
С этим изменением выходной (попробуйте на Go Playground).
1 != 2
2 = 2
4 != 2
Примечание:
Вы не обязаны ввести «петлю» переменную, то {{range}}
действие изменяет точку на текущий элемент:
... точки устанавливаются в последовательных элементы массива, ломтик или карта ...
Таким образом, вы можете упростить ваш шаблон, это равносильно тому, ваш:
{{range .}}
{{index . 0}} {{if eq (index . 0) (index . 1)}}={{else}}!={{end}} {{index . 1}}
{{end}}
Также обратите внимание, что вы можете создавать переменные в шаблоне самостоятельно, что рекомендуется, если вы используете одно и то же выражение несколько раз, которое является нетривиальным (например, index . 0
).Это эквивалентно также шаблона:
{{range .}}{{$0 := index . 0}}{{$1 := index . 1}}
{{$0}} {{if eq $0 $1}}={{else}}!={{end}} {{$1}}
{{end}}
также отметить, что в данном конкретном случае, так как вещи, которые вы хотите вывести в if
и else
ветви и содержат =
знак, вам не нужны 2 ветви, =
должен быть выведен в обоих случаях, вам нужен дополнительный знак !
, если они не равны. Таким образом, следующий окончательный шаблон также эквивалентен вашему:
{{range .}}{{$0 := index . 0}}{{$1 := index . 1}}
{{$0}} {{if ne $0 $1}}!{{end}}= {{$1}}
{{end}}