гнездо, если условие находится в пределах диапазона в шаблонах golang

Как использовать условие if в цикле итерации диапазона в 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


person shyam    schedule 11.04.2017    source источник


Ответы (1)


Если вы проверите ошибку, возвращаемую Execute, вы обнаружите, что шаблон пытается передать аргументы к не-функции $i. Правильный синтаксис:

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

Аргументы следуют за функцией gt. Функция gt не является инфиксным оператором.

пример игровой площадки

Если ваша цель — распечатать список, разделенный запятыми, напишите его так:

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

пример игровой площадки

person Cerise Limón    schedule 11.04.2017
comment
Спасибо. Я пропустил всю часть префикса, когда просматривал документы :) - person shyam; 11.04.2017