在Go模板中迭代一系列整数

时间:2014-03-28 12:55:40

标签: templates loops go

我试图在模板中进行迭代迭代,但似乎没有办法进行迭代。

而不是

{{range $i, $e := .aSlice}}

我想做这样的事情

{{range $i := 1 .. 10}}
    <div>{{$i}}</div>
{{end}}

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:11)

对于最少量的工作,您可以使用包github.com/bradfitz/iter。 它提供了一个函数N,你可以这样使用它:

{{range $i, $_ := N 10}}
    <div>{{$i}}</div>
{{end}}

使用模板上的Funcs方法添加功能N,如下所示:

myTemplate.Funcs(template.FuncMap{"N": iter.N})

对于1..m而不是0..m使用N m+1并忽略0

{{range $i, $_ := N 11}}
    {{if $i}}
        <div>{{$i}}</div>
    {{end}}
{{end}}

当然你可以解决这个完全不同的问题。只需定义自己的功能即可 两个参数并创建一个整数流,例如(play):

func N(start, end int) (stream chan int) {
    stream = make(chan int)
    go func() {
        for i := start; i <= end; i++ {
            stream <- i
        }
        close(stream)
    }()
    return
}

templ := `{{range $i := N 1 10}}
            <div>{{$i}}</div>
      {{end}}`

t := template.New("foo").Funcs(template.FuncMap{"N": N})