在golang模板中实现for循环

问题描述 投票:0回答:2

我在Golang工作,现在我需要在select中打印至少20个选项,所以我需要使用从0到20的某种循环(以获得索引)。

如何在golang模板中使用for循环?

我需要在模板中生成数字序列。我没有任何迭代的数组。

编辑:我需要得到这样的东西:

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

所以,我需要在代码中做类似的事情:

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

但是,这不起作用

go-templates
2个回答
2
投票

您也可以在模板中使用range。见https://golang.org/pkg/text/template/#hdr-Variables

最简单的选择可能是使用包含您的选项的切片:

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})
}

1
投票

最好的办法是在func_map中添加“迭代”功能。

template.FuncMap{
        "Iterate": func(count *uint) []uint {
            var i uint
            var Items []uint
            for i = 0; i < (*count); i++ {
                Items = append(Items, i)
            }
            return Items
        },
    }
}

使用文本/模板注册功能映射后,可以像这样迭代:

{{- range $val := Iterate 5 }}
  {{ $val }}
{{- end }}

我不知道为什么这个有用的函数不是text / template提供的默认函数集的一部分。也许他们将来会添加类似的东西。

© www.soinside.com 2019 - 2024. All rights reserved.