これは一見単純ですが、私を狂わせます。
golang テンプレートのネストされた範囲内でスコープの上位にある構造体要素を参照するにはどうすればよいですか?
例:
type Foo struct {
Id string
Name string
}
type Bar struct {
Id string
Name string
}
var foos []Foo
var bars []Bar
// logic to populate both foos and bars
テンプレートでは:
{{range .foos}}
<div>Foo {{.Name}}</div>
<div>
{{range ..bars}}
<div>Bar {{.Name}} <input type="text" name="ids_{{..Id}}_{{.Id}}" /></div>
{{end}}
</div>
{{end}}
明らかに ..bars と ..Id は機能しませんが、私の意図が明確であることを願っています。Foo と Bar のすべての組み合わせを繰り返し処理し、Foo の Id と Bar の Id の両方によって作成された名前を持つフォーム要素を生成したいと思います。
問題は、次のことが不可能に見えることです。
- foos 範囲スコープのスコープ内からバーにアクセスする
- バーの範囲スコープ内から Foo の ID にアクセスする
両方の構造体に多数の冗長なフィールドを配置することで、これを一時的に回避できますが、これは私には非常に見苦しく、DRY に違反し、一般的に非常に間違っているように感じます。
私がやりたいことを行うためにgolangテンプレートを使用する方法はありますか?