В простом примере, который вы разместили, проще всего написать "fhe": вы можете легко проверить, является ли текущий индекс первым, и вывести запятую после не первых элементов. И, наконец, выведите конечную точку.
Если в более сложном примере вам нужно обнаружить последний
элемент, или может случиться так, что список, который вы перебираете, может быть пустым (и, следовательно, конечная точка будет ошибкой), вы можете зарегистрировать пользовательскую функцию, чтобы определить, является ли текущий индекс последним:
lister := template.Must(template.New("foo").Funcs(template.FuncMap{
"IsLast": func(i, size int) bool { return i == size-1 },
}).Parse(tpl))
И используйте следующий шаблон:
tpl := "{{range $i, $el := .items}}{{$el}}{{if IsLast $i (len $.items)}}.{{else}},{{end}}{{end}}"
Тогда будет вывод (попробуйте на Go Playground ):
1,4,2.
Вариантом этого может быть регистрация пользовательской функции, которая вычисляет последний индекс по длине (lastIdx = length - 1
), а затем внутри {{range}}
вы можете сделать простое сравнение:
tpl := "{{$lastIdx := LastIdx (len .items)}}{{range $i, $el := .items}}{{$el}}{{if eq $lastIdx $i}}.{{else}},{{end}}{{end}}"
lister := template.Must(template.New("foo").Funcs(template.FuncMap{
"LastIdx": func(size int) int { return size - 1 },
}).Parse(tpl))
Вывод будет таким же. Попробуйте это на игровой площадке Go .