Templates 戈朗。如何使用html/模板包创建循环函数

Templates 戈朗。如何使用html/模板包创建循环函数,templates,go,Templates,Go,我正在尝试将循环实现为自定义函数。它需要迭代次数和花括号之间的内容,然后它应该迭代括号之间的内容n次。请参见示例: main.go template.Must(template.ParseFiles("palette.html")).Funcs(template.FuncMap{ "loop": func(n int, content string) string { var r string for i := 0; i <=

我正在尝试将循环实现为自定义函数。它需要迭代次数和花括号之间的内容,然后它应该迭代括号之间的内容n次。请参见示例:

main.go

template.Must(template.ParseFiles("palette.html")).Funcs(template.FuncMap{
        "loop": func(n int, content string) string {
            var r string
            for i := 0; i <= n; i++ {
                r += content
            }
            return r
        },
    }).ExecuteTemplate(rw, index, nil)
template.Must(template.ParseFiles(“palete.html”)).Funcs(template.FuncMap{
“循环”:func(n int,内容字符串)字符串{
var字符串

对于i:=0;i可以对返回切片的函数使用
range

主程序包
进口(
“html/模板”
“操作系统”
)
func main(){
html:=`
{{range loop 16}}
{{end}
`
tmpl:=template.Must(template.New(“test”).Funcs(template.FuncMap{
“循环”:func(n int)[]结构{}{
返回make([]结构{},n)
},
}).Parse(html))
tmpl.Execute(os.Stdout,nil)
}

好主意!因此无法从花括号中获取内容?)如果您不使用切片元素,则使用空结构更有效。这样您只分配一个切片头(恒定大小),而不是n个元素。是的!您完全正确!)@Innominate,请更新您的答案。
{{define "index"}}
<div class="row -flex palette">
  {{loop 16}}
    <div class="col-2"></div>
  {{end}}
</div>
{{end}}
<div class="row -flex palette">
    <div class="col-2"></div>
    <div class="col-2"></div>
    <div class="col-2"></div>
    <div class="col-2"></div>
    ... 16 times
</div>
package main

import (
    "html/template"
    "os"
)

func main() {
    html := `
<div class="row -flex palette">
  {{range loop 16}}
    <div class="col-2"></div>
  {{end}}
</div>`
    tmpl := template.Must(template.New("test").Funcs(template.FuncMap{
        "loop": func(n int) []struct{} {
            return make([]struct{}, n)
        },
    }).Parse(html))
    tmpl.Execute(os.Stdout, nil)
}