go - 获取 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 模板中的索引。
谢谢你。
解决方案
使用 Go 模板没有一种干净的方法可以做到这一点,但是这是一种解决方法。一个更简单的解决方法是在将结构传递给模板之前将最后一项添加到结构中。你正在做的是将复杂的逻辑从模板中移出(模板并不是为了这样做而设计的)并进入 Go 代码。
type Post struct {
....
Comments []Comment
LastComment Comment
}
然后在您的模板中,只需执行
{{ .LastComment }}
推荐阅读
- amazon-web-services - 您的内部负载均衡器必须有一个私有子网
- c# - C#如何订阅用户控件事件/用户控件没有实例名称
- devops - 具有多个存储库的 Azure Yaml 管道,基于错误的存储库构建摘要
- javascript - 如何在 WebRTC 中检测冻结的视频流
- android - 如何在 Android 中从图库中选择多个图像
- json - prettier-vscode 被配置为格式化程序,但它无法格式化“Json”文件
- excel - Excel 无法将工作表正确导出为 pdf
- c# - 从 dataGridView 传递日期值时,richTextBox 中的日期格式
- css - SASS:使用相同参数的媒体查询和 id
- substrate - 从 github 构建基板项目时如何找到正确的 rust nightly 版本