range action

suggest change

Just as in Go, range can iterate over arrays, slices, maps and channels.

Range over arrays and slices

main.go

const tmplStr = `Elements of arrays or slice: {{ range . }}{{ . }} {{end}}
`

	t := template.Must(template.New("range").Parse(tmplStr))

	array := [...]int{3, 8}
	err := t.Execute(os.Stdout, array)
	if err != nil {
		log.Fatalf("t.Execute() failed with '%s'\n", err)
	}

	slice := []int{12, 5}
	err = t.Execute(os.Stdout, slice)
	if err != nil {
		log.Fatalf("t.Execute() failed with '%s'\n", err)
	}

Output:

Elements of arrays or slice: 3 8 
Elements of arrays or slice: 12 5 

Range over maps

main.go

const tmplStr = `Elements of map:
{{ range $k, $v := . }}{{ $k }}: {{ $v }}
{{end}}`

	t := template.Must(template.New("range").Parse(tmplStr))

	data := map[string]int{
		"one":  1,
		"five": 5,
	}
	err := t.Execute(os.Stdout, data)
	if err != nil {
		log.Fatalf("t.Execute() failed with '%s'\n", err)
	}

Output:

Elements of map:
five: 5
one: 1

Range over channels

main.go

const tmplStr = `Elements of a channel: {{ range . }}{{ . }} {{end}}
`

	t := template.Must(template.New("range").Parse(tmplStr))

	ch := make(chan int)
	go func() {
		for i := 0; i < 3; i++ {
			ch <- i
		}
		close(ch)
	}()
	err := t.Execute(os.Stdout, ch)
	if err != nil {
		log.Fatalf("t.Execute() failed with '%s'\n", err)
	}

Output:

Elements of a channel: 0 1 2 

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:



Table Of Contents