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 中にデータの他の変数にアクセスするには $.変数名
となる。