亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取 Golang 模板中結構中數組的最后一個元素

獲取 Golang 模板中結構中數組的最后一個元素

Go
桃花長相依 2022-09-05 10:43:40
我正在 Go 中為學校項目構建一個簡單的論壇,并且我正在將數據結構傳遞給模板以顯示子論壇中的所有帖子。我傳遞給模板的數據是這樣的:type Data struct {   ID    int       // ID of the subforum   User  User      // logged-in user   Posts []Post    // all the posts of the subforum}數據結構中的 Post 結構如下所示:type Post struct {    ID         int    Title      string    Content    string    Date       time.Time    [...]    Author     User    Comments   []Comment}注釋結構類似于 Post 結構。當我顯示所有帖子的列表時,我還想顯示回復的數量和上次回復的日期/時間。在我的HTML模板中,我可以得到這樣的回復數量:{{range .Posts}}    <p>Replies: {{ len .Comments }}</p>{{ end }}...但我似乎無法弄清楚注釋數組中最后一個元素的日期。我知道你可以得到第一個元素與索引關鍵字和值'0',但我不能使用(len .注釋 -1) 在模板中獲取最后一個元素,因為 '-' 是禁止的字符。我可能會創建第二個函數來使我的注釋按SQLite數據庫的降序排序,但我想知道是否有一種簡單的方法來處理Go模板中的索引。
查看完整描述

2 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

使用 Go 模板沒有一種干凈的方法來執行此操作,但是這是一種解決方法。更簡單的解決方法是在將結構傳遞給模板生成器之前將最后一項添加到結構中。您正在做的是將復雜的邏輯移出模板(模板不是為執行此操作而設計的)并移動到Go代碼中。


type Post struct {

    ....

    Comments   []Comment

    LastComment Comment

}

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


{{ .LastComment }}


查看完整回答
反對 回復 2022-09-05
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

您可以使用模板中的自定義函數來獲取最后一個元素:


fmap := template.FuncMap{

    "lastElem": func(comments []Comment) Comment { 

        return comments[len(comments)-1]

    },

}


tmpl, err := template.New("tmpl").Funcs(fmap).Parse(tpl)

然后在模板中將其用作:


{{range .Posts}}


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


{{ end }}


查看完整回答
反對 回復 2022-09-05
  • 2 回答
  • 0 關注
  • 1000 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號