首頁 > 後端開發 > Golang > Go 模板範圍循環變數會在每次迭代時重置嗎?

Go 模板範圍循環變數會在每次迭代時重置嗎?

DDD
發布: 2024-12-21 02:20:10
原創
875 人瀏覽過

Do Go Template Range Loop Variables Reset on Each Iteration?

Go 模板範圍循環中的變數:它們在迭代時重置嗎?

在 Go 模板中,範圍循環之外聲明的變數不會重置在每次迭代中。但是,在循環中為變數分配新值時會出現問題。

考慮以下程式碼:

{{ $prevDate := "" }}
{{ range $post := .Posts }}
    {{ if ne $prevDate $post.Date }}
        <div>
登入後複製

目的是將 $prevDate 與目前貼文的日期進行比較以確定該貼文是否發生在同一天。但是, $prevDate 似乎在每次循環迭代開始時重置為空字串。

此行為的原因是變數 $prevDate 在循環內重新宣告。這將建立一個僅在當前迭代範圍內的新變數。原始 $prevDate 變數在循環外保持不變。

要解決此問題,有兩種可能的解決方案:

解決方案 #1:使用註冊函數

您可以註冊一個自訂函數,該函數會取得目前索引並傳回上一篇文章的索引日期:

func PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return posts[i-1].Date
}
登入後複製

然後,在您的範本中:

{{range $index, $post := .Posts}}
    {{$prevDate := PrevDate $index}}
    ...
{{end}}
登入後複製

解決方案#2:使用帖子方法

解決方案#2:使用帖子方法

func (p *Posts) PrevDate(i int) string {
    if i == 0 {
        return ""
    }
    return (*p)[i-1].Date
}
登入後複製

解決方案#2:使用帖子方法

{{range $index, $post := .Posts}}
    {{$prevDate := $.Posts.PrevDate $index}}
    ...
{{end}}
登入後複製
在您的模板:

以上是Go 模板範圍循環變數會在每次迭代時重置嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板