Голанг, разделяющий элементы запятой в шаблоне
Я пытаюсь отобразить список значений, разделенных запятыми, и не хочу отображать запятую после последнего элемента (или единственного элемента, если есть только один).
Мой код:
Equipment:
{{$equipment := .Equipment}}
{{ range $index, $element := .Equipment}}
{{$element.Name}}
{{if lt $index ((len $equipment) -1)}}
,
{{end}}
{{end}}
Токовый выход: Equipment: Mat , Dumbbell ,
Как избавиться от конечной запятой
Ответы
Ответ 1
Хороший трюк, который вы можете использовать:
Equipment:
{{$equipment := .Equipment}}
{{ range $index, $element := .Equipment}}
{{if $index}},{{end}}
{{$element.Name}}
{{end}}
Это работает, потому что первый индекс равен 0, который возвращает false в выражении if. Таким образом, этот код возвращает false для первого индекса, а затем помещает запятую перед каждой последующей итерацией. Это приводит к списку, разделенному запятыми, без ведущей или конечной запятой.
Ответ 2
Добавьте функцию шаблона, чтобы сделать работу за вас. strings.Join
идеально подходит для вашего случая использования.
Предполагая, что tmpl
содержит ваши шаблоны, добавьте функцию Join
в ваш шаблон:
tmpl = tmpl.Funcs(template.FuncMap{"StringsJoin": strings.Join})
Шаблон:
Equipment:
{{ StringsJoin .Equipment ", " }}
площадка
Docs: https://golang.org/pkg/text/template/#FuncMap
Ответ 3
Если вы хотите использовать внешнюю библиотеку, похоже, что в библиотеке sprig есть функция "соединения" (см. здесь):
присоединиться
Объедините список строк в одну строку с указанным разделителем.
list "hello" "world" | join "_"
Приведенное выше приведёт к созданию hello_world
Оператор объединения попытается преобразовать нестандартные значения в строковые:
list 1 2 3 | join "+"
Выше будет 1 + 2 + 3