Golang用模板中的逗号分隔项目

时间:2014-01-23 10:45:25

标签: go

我正在尝试显示逗号分隔值的列表,并且不希望在最后一个项目后显示逗号(或者只有一个项目时只显示一个逗号)。

到目前为止我的代码:

Equipment:
    {{$equipment := .Equipment}}
    {{ range $index, $element := .Equipment}}
        {{$element.Name}}
        {{if lt $index ((len $equipment) -1)}}
            ,
        {{end}}
    {{end}}

当前输出:Equipment: Mat , Dumbbell , 如何摆脱尾随的逗号

4 个答案:

答案 0 :(得分:57)

您可以使用的一个好方法是:

Equipment:
    {{$equipment := .Equipment}}
    {{ range $index, $element := .Equipment}}
        {{if $index}},{{end}}
        {{$element.Name}}
    {{end}}

这是有效的,因为第一个索引是0,它在if语句中返回false。因此,此代码对第一个索引返回false,然后在每个后续迭代前放置一个逗号。这会产生逗号分隔的列表,而不带前导或尾随逗号。

答案 1 :(得分:12)

添加模板功能,为您完成工作。 strings.Join非常适合您的用例。

假设tmpl包含您的模板,请将Join功能添加到您的模板中:

tmpl = tmpl.Funcs(template.FuncMap{"StringsJoin": strings.Join})

模板:

Equipment:
    {{ StringsJoin .Equipment ", " }}

Playground

文档:https://golang.org/pkg/text/template/#FuncMap

答案 2 :(得分:0)

如果您愿意使用外部库,则似乎小树枝库具有“ join”功能(请参见here):

  

加入

     

使用给定的分隔符将字符串列表加入单个字符串。

list "hello" "world" | join "_"
     

以上将产生hello_world

     

join将尝试将非字符串转换为字符串值:

list 1 2 3 | join "+"
     

以上将产生1 + 2 + 3

答案 3 :(得分:0)

另一种给猫剥皮的方法,如果您可以为该字段创建一个新类型。

type MyList []string

func (list MyList) Join() string {
    return strings.Join(list, ", ")
}

然后你就可以像正则一样使用模板中的函数了:

{{ .MyList.Join }}