shyam
shyam

Reputation: 9368

nest if condition within a range in golang templates

How to use an if condition within a range iteration loop in go?

package main

import "os"
import "text/template"

const t = `{{range $i, $v := .}}{{$i}} {{$v}}{{if $i gt 0}}, {{end}}
{{end}}
`

func main() {
    d := []string{"a", "b", "c"}
    template.Must(template.New("").Parse(t)).Execute(os.Stdout, d)
}

https://play.golang.org/p/IeenD90FRM

Upvotes: 1

Views: 5480

Answers (1)

Thundercat
Thundercat

Reputation: 120951

If you check the error returned from Execute, you will find that the template is attempting to pass arguments to the non-function $i. The correct syntax is:

const t = `{{range $i, $v := .}}{{$i}} {{$v}}{{if gt $i 0}}, {{end}}
{{end}}
`

The arguments follow the function gt. The function gt is not an infix operator.

playground example

If your goal is to print a comma separated list, then write it like this:

const t = `{{range $i, $v := .}}{{if $i}}, 
{{end}}{{$i}} {{$v}}{{end}}
`

playground example

Upvotes: 3

Related Questions