2017-02-03 4 views
1

次のネストされた構造体を持っています。テンプレート内で、{{range .Foos}}タグで反復処理したいと思います。Goテンプレート:入れ子構造体のフィールドと{{range}}タグを一緒に使用する

type Foo struct { 
    Field1, Field2 string 
} 

type NestedStruct struct { 
    NestedStructID string 
    Foos []Foo 
} 

私は、次のHTML /テンプレートにしようとしているが、それはNestedStructからNestedStructIDにアクセスすることはできません。

{{range .Foos}} { source: '{{.Field1}}', target: '{{.NestedStructID}}' }{{end}} 

私がしたいことを行うためにgolangテンプレートを使用する方法はありますか?

答えて

1

アクションは、現在の要素の各繰り返しでパイプライン(ドット.)を設定するため、NestedStructIDフィールドには到達できません。

は、Template.Execute()に渡されたデータ引数に設定されています。したがって、NestedStructという値を渡す場合は、$.NestedStructIDを使用できます。例えば

func main() { 
    t := template.Must(template.New("").Parse(x)) 

    ns := NestedStruct{ 
     NestedStructID: "nsid", 
     Foos: []Foo{ 
      {"f1-1", "f2-1"}, 
      {"f1-2", "f2-2"}, 
     }, 
    } 
    fmt.Println(t.Execute(os.Stdout, ns)) 
} 

const x = `{{range .Foos}}{ source: '{{.Field1}}', target: '{{$.NestedStructID}}' } 
{{end}}` 

が出力(Go Playground上でそれを試してみてください):

{ source: 'f1-1', target: 'nsid' } 
{ source: 'f1-2', target: 'nsid' } 
<nil> 

これはtext/templateで文書化されています

実行が開始されると、$に設定されてデータ引数はExecuteに渡されます。つまり、ドットの開始値に渡されます。

+0

もう一度、この明確な説明をお寄せいただきありがとうございます。わたしにはできる :) – Doby

関連する問題