てけノート

on the foot of giants

[golang]http/templateを使ってレンダリング+logger3選

      2017/02/21


Golangの勉強をちょっとしているので備忘録的に。

作ったソース

説明

・golangの開発は基本的には標準パッケージでいける
・loggerは標準だと貧弱なのでgithubで探したほうが良さそう
・handlerを分離した方が見やすい
・templateを使ってcontrollerとviewを分離

細かいところ

loggerの話

goの標準のloggerだと、logをレベルでわけられないらしい。(log.Warn()みたいな書き方ができない)
それだともちろん困るので、githubを探していいloggerを導入する。githubのスターが多い順に3つ紹介する。

logrus
一番安牌っぽいやつ。スター数がダブルスコアなので今回はこれを採用

zap
uberが作ってるらしい。
glog
先輩が教えてくれたやつ。使い勝手はよさそう

templateを使ってviewの分離

いわゆる他の言語のcontrollerとviewの分離的な話(のはず)。
text/templateよりもhtml/templateを使った方が、webアプリとかやるときのことが考慮されててよいらしい。

ここで、controllerからviewに渡す変数群のクラスを定義している。ここで定義したものを、templateに渡すことができる。

handler内でインスタンス化。TitleとTextを引数として渡している。

main関数の外でtemplateをインスタンスすることでキャッシュ化するらしい。
ParseFilesじゃなくてParseGlobを使えば、ワイルドカードでtemplateを指定可能。

ここでtemplateに読み込んだhtmlに変数を入れてview生成、wに投げる。さきほどのpageインスタンスを渡してやると、index.html内の {{ .Title }} みたいになってるところに、先程渡した”welcome to my page”が入る。
今はtemplateとして1つのhtmlしか渡していないが、tmpl_mainインスタンスの部分には複数のhtmlを渡すことができるので、もとのhtmlの名前(今回はindex.html)をここの引数として渡して指定。
レンダリングに問題があったらerrにインスタンスが帰ってくるので

ここでキャッチする。
表示するときのステータスコードは公式にまとまってるのでこれを使う。

参考

https://hackernoon.com/golang-template-1-bcb690165663#.pgd71blsr
https://golang.org/pkg/html/template/#Template.ExecuteTemplate
https://golang.org/doc/articles/wiki/#tmp_10

Codelab: Webアプリケーションを書いてみよう

excuse

インスタンスを渡す、とか言ってるところは想像なので、違ってたらごめんなさい。コード自体は動くものです。

 - golang, プログラミング