風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別blogからの引っ越しなのでレイアウトがアレです。

text/templateで配列の配列をもつ構造体の配列をもつ構造体を表示したい場合

golangで text/template を使用して文字を出力する場合で 渡すオブジェクトに、オブジェクトの配列(スライス)が含まれていて、 かつそのオブジェクト内にも配列(スライス)が含まれていた場合の表示方法。

文字で書くとわけわかめだがこんなの。

type piyo struct {
    Array    [4][4]int
}

type hoge struct {
    piyos    [4]piyo
}

hoge.piyos[0].Array[0][0] にアクセスする場合の テンプレート側の書き方は、templateにhogeを渡したとして、

{{with index .piyos 0}}{{index .Array 0 0}}{{end}}

です。
HTML出力にtemplateを使用する場合は html/template を使いましょう。

なんというか、言語内は素晴らしく直感的なのに、 なんでこういうところがあまり直感的に見えないフォーマットなんだろう…。

参考

(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) ol.className = "preLine" ol.setAttribute("role", "presentation") for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)