i++

プログラム系のメモ書きなど

golang : template の range で index を使う

以下の様なデータを template.Execute のデータに渡したとすると

type data struct {
    Values      []string
    OtherValues []string
}

テンプレートで

<ul>
    {{range $i, $v := .Values}}
    <li>{{index $.OtherValues $i}} のようにするとインデックスでアクセスできる( OtherValues[i]の値)。{{$v}} はもちろん Values[i]</li>
    {{end}}
</ul>

のようにすれば、Values にループをかけている最中にインデックスを使って他の配列やスライスの特定の値にアクセスできる

template - The Go Programming Language に書いている通り、テンプレート中の {{index スライスや配列の変数 インデックス値}}ソースコード中のスライスや配列の変数[インデックス値] に対応する。

index
    Returns the result of indexing its first argument by the
    following arguments. Thus "index x 1 2 3" is, in Go syntax,
    x[1][2][3]. Each indexed item must be a map, slice, or array.

また、$ が Execution に渡されたデータを指すので、range 中にデータの他の変数にアクセスするには $.変数名 となる。