偵測範本範圍中的最後一個元素
使用範本時,您可能會遇到需要確定範本範圍中最後一個元素的情況一個範圍。當您想要根據目前專案的位置自訂輸出時,這尤其有用。
考慮以下範本:
{{range $i, $e := .SomeField}} {{if $i}}, {{end}} $e.TheString {{end}}
此範本產生以下輸出:
one, two, three
但是,如果您想要將輸出修改為:
one, two, and three
您需要一種方法來偵測目前項目是範圍中的最後一個元素。
實作
使用變數儲存陣列長度和目前索引的傳統方法在範本中不起作用。幸運的是,有一個使用自訂模板函數的解決方案:
package main import ( "os" "reflect" "text/template" ) var fns = template.FuncMap{ "last": func(x int, a interface{}) bool { return x == reflect.ValueOf(a).Len() - 1 }, }
該函數檢查提供的索引 x 是否等於數組 a 的長度減 1,表明它是最後一個元素。
用法
要在模板中使用此函數,您可以如下調用它:
{{range $i, $e := .}}{{if $i}}, {{end}}{{if last $i $}}and {{end}}{{$e}}{{end}}.`
此模板將產生所需的輸出:
one, two, and three
額外最佳化
您也可以使用不含反射的 len 函數來完成相同的結果,進一步提高此解決方案的效率。
以上是如何在 Go 中偵測模板範圍中的最後一項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!