В опубликованном вами простом примере проще всего то, что опубликовал "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 Playground.
person
icza
schedule
29.04.2018