テンプレート範囲内の最後の項目の検出
テンプレートを使用する場合、テンプレート範囲内の最後の要素を決定する必要がある状況が発生することがあります。範囲。これは、現在の項目の位置に基づいて出力をカスタマイズする場合に特に便利です。
次のテンプレートを検討してください:
{{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 が配列の長さから 1 を引いたものに等しいかどうかをチェックし、それが最後の要素であることを示します。
使用法
テンプレートでこの関数を使用するには、次のように呼び出します。
{{range $i, $e := .}}{{if $i}}, {{end}}{{if last $i $}}and {{end}}{{$e}}{{end}}.`
このテンプレートは次の目的の出力を生成します:
one, two, and three
追加の最適化
代わりに len 関数を使用することもできます反省することなく同じ結果を達成できるため、このソリューションの効率がさらに向上します。
以上がGo でテンプレート範囲内の最後の項目を検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。