首页 > 解决方案 > 获取 Golang 模板中结构内数组的最后一个元素

问题描述

我正在为一个学校项目在 Go 中构建一个简单的论坛,并且我正在将一个数据结构传递给一个模板以显示子论坛中的所有帖子。我传递给模板的数据是这样的:

type Data struct {
   ID    int       // ID of the subforum
   User  User      // logged-in user
   Posts []Post    // all the posts of the subforum
}

Data结构中的Post结构是这样的:

type Post struct {
    ID         int
    Title      string
    Content    string
    Date       time.Time
    [...]
    Author     User
    Comments   []Comment
}

Comment结构类似于Post结构。当我显示所有帖子的列表时,我还想显示回复数量和最后回复的日期/时间。

在我的 HTML 模板中,我可以获得如下回复的数量:

{{range .Posts}}

    <p>Replies: {{ len .Comments }}</p>

{{ end }}

...但我似乎无法理解获取 Comments 数组的最后一个元素的日期。我知道您可以使用index关键字和值 '0' 获取第一个元素,但我不能在模板中使用(len .Comments -1)来获取最后一个元素,因为 '-' 是一个禁止字符。我可能会创建第二个函数,让我的评论从我的 SQLite 数据库中按降序排序,但我想知道是否有一种简单的方法来处理 Go 模板中的索引。

谢谢你。

标签: gogo-templates

解决方案


使用 Go 模板没有一种干净的方法可以做到这一点,但是这是一种解决方法。一个更简单的解决方法是在将结构传递给模板之前将最后一项添加到结构中。你正在做的是将复杂的逻辑从模板中移出(模板并不是为了这样做而设计的)并进入 Go 代码。

type Post struct {
    ....
    Comments   []Comment
    LastComment Comment
}

然后在您的模板中,只需执行

{{ .LastComment }}

推荐阅读