如何迭代golang模板中的一系列数字?

How to iterate over a range of numbers in golang template?

我想做这样的事情:

  {{range $y := .minYear    .maxYear}}                                                                                                
      <option value="y"> {{$y}}</option>                                                                                                
  {{end}}

但是模板没有按预期呈现。我该如何解决这个问题?

模板包不直接支持这个。创建一个模板函数,其中 returns 整数值的一部分:

var funcs = template.FuncMap{
    "intRange": func(start, end int) []int {
        n := end - start + 1
        result := make([]int, n)
        for i := 0; i < n; i++ {
            result[i] = start + i
        }
        return result
    },
}

这样使用:

t := template.Must(template.New("").Funcs(funcs).Parse(`{{range $y := intRange .minYear .maxYear}}
   <option value="y"> {{$y}}</option>{{end}}`))

err := t.Execute(os.Stdout, map[string]int{"minYear": 1961, "maxYear": 1981})
if err != nil {
    // handle error
}

Run it on the Go playground.

您可以在模板中使用 sprig 库:

https://github.com/Masterminds/sprig