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中文網其他相關文章!