我有这样的代码:
package main import ( "text/template" "os" ) func main() { type Map map[string]string m := Map { "a": "b", "c": "d", } const temp = `{{range $key, $value := $}}key:{{$key}} value:{{$value}},{{end}}` t := template.Must(template.New("example").Parse(temp)) t.Execute(os.Stdout, m) }
它会输出:
键:a值:b,键:c值:d,
但我想要这样的东西:
键:a值:b,键:c值:d
我不需要最后一个逗号,如何删除它。我在这里找到了用于循环数组的解决方案:https : //groups.google.com/d/msg/golang- nuts/XBScetK-guk/Bh7ZFz6R3wQJ,但是我无法获取地图索引。
这是使用模板函数编写逗号分隔的键/值对的方法。
声明一个函数,该函数返回递增并返回计数器的函数:
func counter() func() int { i := -1 return func() int { i++ return i } }
将此功能添加到模板中:
t := template.Must(template.New("example").Funcs(template.FuncMap{"counter": counter}).Parse(temp))
像这样在模板中使用它:
{{$c := counter}}{{range $key, $value := $}}{{if call $c}}, {{end}}key:{{$key}} value:{{$value}}{{end}}
该模板将分隔符写在键值对之前,而不是写在对之后。
计数器在循环之前创建,并在每次循环中递增。第一次不通过循环写入分隔符。
在操场上跑步。
可以通过将if语句移至Go代码来简化模板中的逻辑:
func separator(s string) func() string { i := -1 return func() string { i++ if i == 0 { return "" } return s } }
将功能添加到模板:
t := template.Must(template.New("example").Funcs(template.FuncMap{"separator": separator}).Parse(temp))
像这样使用它:
{{$s := separator ", "}}{{range $key, $value := $}}{{call $s}}key:{{$key}} value:{{$value}}{{end}}
在操场上跑。