Implement a for loop inside a Go template

Sredny M Casanova picture Sredny M Casanova · Aug 5, 2017 · Viewed 21.2k times · Source

I am working in Go, and right now I need to print at least 20 options inside a select, so I need to use some kind of loop that goes from 0 to 20 (to get an index).

How can I use a for loop inside a Go template?

I need to generate the sequence of numbers inside the template. I don't have any array to iterate.

EDIT: I need to get something like this:

<select>
     <option value="1">1</option>
     <option value="2">2</option>
     <option value="3">3</option>
     <option value="4">4</option>
</select>

So, I need to do in the code something like:

<select>
     {{for i := 1; i < 5; i++}}
        <option value="{{i}}">{{i}}</option>
     {{end}}
</select>

But, this doesn't work.

Answer

jayme picture jayme · Aug 5, 2017

You can use range in templates as well. See https://golang.org/pkg/text/template/#hdr-Variables

Easiest option might be to just use a slice containing your options:

func main() {
    const tmpl = `
<select>
{{range $val := .}}
     <option value="{{$val}}">{{$val}}</option>
{{end}}
</select>
`
    t := template.Must(template.New("tmpl").Parse(tmpl))

    t.Execute(os.Stdout, []int{1, 2, 3})
}