Go 迭代模板切片中数量可变的项

Go 迭代模板切片中数量可变的项,go,go-templates,Go,Go Templates,在搜索了大量文档和论坛主题之后,我还没有找到一个解决方案,可以使用go模板引擎在一个片段中迭代不同数量的项目 我的情况如下: 我已经设置了3个结构,我正在将其中的User传递到一个html页面 type User struct { Name string Foos []Foo } type Foo struct { Name string Description string Bars []Bar } type

在搜索了大量文档和论坛主题之后,我还没有找到一个解决方案,可以使用go模板引擎在一个片段中迭代不同数量的项目

我的情况如下:

我已经设置了3个结构,我正在将其中的
User
传递到一个html页面

type User struct {
    Name    string 
    Foos    []Foo
}

type Foo struct {
    Name        string 
    Description string 
    Bars     []Bar
}

type Bar struct {
    Name    string 
}
我只想从
User
迭代每个
Foo
中的前3个
Bar
,但我还需要考虑每个
Bar
包含少于3项的可能性

下面将迭代所有
,但我只想列出最多3条,当然,如果切片中只有那么多条,则只列出1或2条

{{range .Foos}}
<div>
    <h3>{{.Name}}</h3>
    <h4>{{.Description}}</h4>
    <ol>
        {{range .Bars}}
        <li> {{.Name}} </li>
        {{end}}
    </ol>
</div>
{{end}}
{{range.Foos}
{{.Name}
{{.Description}
{{range.bar}
  • {{.Name}
  • {{end} {{end}

    使用go模板引擎是否可以实现这一点?如有任何帮助,我们将不胜感激。

    如评论中所述,您可以在将切片发送到模板之前对其进行修剪,但如果它是嵌套结构的一部分,您需要在以后继续使用,则可能会出现问题

    另一种选择是避免在循环内的索引上处理超过3个if值的元素:

    {{range $i, $val := .Bars}}
        {{if le $i 3}}<li> {{$val.Name}} </li>{{end}}
    {{end}}
    
    {{range$i,$val:=.bar}
    {{if le$i 3}}
  • {{$val.Name}
  • {{end} {{end}
    在将结构发送到模板之前,为什么不根据自己的喜好对其进行裁剪?类似于
    user.Foos=user.Foos[0:3]