我在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>
但是,这不起作用
答案 0 :(得分: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 :(得分: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 }}
我不知道为什么这个有用的功能不是文本/模板提供的默认功能集的一部分。也许他们将来会添加类似的内容。
答案 2 :(得分:0)
您可以将seq
与range
一起使用
运行20个循环的迭代示例
{{ range $index, $num := (seq 20) }}
$indexStartingAt1 := (add $index 1)
{{ end }}