Loops Golang代码重复一个html代码n次

Loops Golang代码重复一个html代码n次,loops,go,go-templates,Loops,Go,Go Templates,我正在开发golang web应用程序。在这种情况下,我需要迭代HTML行n多次 func index(w http.ResponseWriter, r *http.Request) { tmpl := template.Must(template.ParseFiles("templates/index.html")) n := 5 tmpl.Execute(w, n) } <ul> <li><a href="/?page=1"&g

我正在开发golang web应用程序。在这种情况下,我需要迭代HTML行
n
多次

func index(w http.ResponseWriter, r *http.Request) {
    tmpl := template.Must(template.ParseFiles("templates/index.html"))
    n := 5
    tmpl.Execute(w, n)
}

<ul>
    <li><a href="/?page=1">1</a></li>
    <li><a href="/?page=2">2</a></li>
                    .
                    .
                    .
    <li><a href="/?page=n">n</a></li>
</ul>
func索引(w http.ResponseWriter,r*http.Request){
tmpl:=template.Must(template.ParseFiles(“templates/index.html”))
n:=5
tmpl.Execute(w,n)
}
  • . . .

如何实现这一点?

要在Go模板中重复某些内容,可以使用
{{range}
操作。但是
{{range}}
操作需要它可以迭代的东西,例如切片、数组或映射

传递零值片 所以你必须喂它。但是不需要内存的空片就足够了,例如,
make([]struct{},n)

模板代码:

const templ = `<ul>
{{range $idx, $e := .}}
    <li><a href="/?page={{$idx}}">{{$idx}}</a></li>
{{end}}
</ul>`
输出(在上尝试):

这次输出(在上尝试):

使用零值切片和自定义函数 如果您不想费心填充切片,只需要从1开始递增数字,那么另一个选项是注册一个函数,该函数接收一个数字,并向其添加1,然后返回结果。因此,您可以继续使用零值切片的索引,并且可以调用自定义函数来获得等于index+1的数字:

func main() {
    tmpl := template.Must(template.New("").Funcs(template.FuncMap{
        "Add": func(i int) int { return i + 1 },
    }).Parse(templ))
    n := 5
    if err := tmpl.Execute(os.Stdout, make([]struct{}, n)); err != nil {
        panic(err)
    }
}

const templ = `<ul>
{{range $idx, $e := .}}{{$idx := (Add $idx)}}
    <li><a href="/?page={{$idx}}">{{$idx}}</a></li>
{{end}}
</ul>`
func main(){
tmpl:=template.Must(template.New(“”).Funcs(template.FuncMap{
“Add”:func(i int)int{return i+1},
}).Parse(模板))
n:=5
如果err:=tmpl.Execute(os.Stdout,make([]结构{},n));err!=nil{
恐慌(错误)
}
}
常量模板=`
    {{range$idx,$e:=.}{{$idx:=(Add$idx)}
  • {{end}
`
这次输出(在上尝试):


我在我的html文件中使用{.},但它仍然从0开始。@TavinderSingh我已经介绍了3种不同的解决方案,请显示您使用的完整代码(例如Go Playder链接)。
<ul>

    <li><a href="/?page=0">0</a></li>

    <li><a href="/?page=1">1</a></li>

    <li><a href="/?page=2">2</a></li>

    <li><a href="/?page=3">3</a></li>

    <li><a href="/?page=4">4</a></li>

</ul>
const templ = `<ul>
{{range .}}
    <li><a href="/?page={{.}}">{{.}}</a></li>
{{end}}
</ul>`
tmpl := template.Must(template.New("").Parse(templ))
n := 5
values := make([]int, n)
for i := range values {
    values[i] = (i + 1) * 2
}
if err := tmpl.Execute(os.Stdout, values); err != nil {
    panic(err)
}
<ul>

    <li><a href="/?page=2">2</a></li>

    <li><a href="/?page=4">4</a></li>

    <li><a href="/?page=6">6</a></li>

    <li><a href="/?page=8">8</a></li>

    <li><a href="/?page=10">10</a></li>

</ul>
func main() {
    tmpl := template.Must(template.New("").Funcs(template.FuncMap{
        "Add": func(i int) int { return i + 1 },
    }).Parse(templ))
    n := 5
    if err := tmpl.Execute(os.Stdout, make([]struct{}, n)); err != nil {
        panic(err)
    }
}

const templ = `<ul>
{{range $idx, $e := .}}{{$idx := (Add $idx)}}
    <li><a href="/?page={{$idx}}">{{$idx}}</a></li>
{{end}}
</ul>`
<ul>

    <li><a href="/?page=1">1</a></li>

    <li><a href="/?page=2">2</a></li>

    <li><a href="/?page=3">3</a></li>

    <li><a href="/?page=4">4</a></li>

    <li><a href="/?page=5">5</a></li>

</ul>