2015-04-05
■[Golang] Golang で Web アプリケーションを作る際のメモ
自分用メモ。
ここら辺を参考にした。
cli
ここら辺が鉄板。
ちょっとアレと思ったのが、グローバルオプションの位置がサブコマンドの前に書かないといけない。
$ ./app runserver --config=./setting.hcl とかやる場合は、runserver のオプションにしないと行けない。
あと、グローバルオプションが goji の goji.Serve() と被って困った。
試してないけど良さそうと思ったけど、どうなんだろう。
Web Framework
goji で決定。
Flask みたいなので良い。
コンテキストを持ち回すのをどうすれば良いのか悩む。
func showPage(c web.C, w http.ResponseWriter, r *http.Request) {
}
func (ctx AppContext) showPage(c web.C, w http.ResponseWriter, r *http.Request) {
}
goji のコンテキストにアプリケーションコンテキストとして渡すのか、goji のコンテキストを使うか…。
とりあえずアプリケーションコンテキストは goji 以外でも持ち回すことになりそうなので、後者でやってみる。
アプリケーションコンテキストに、ロガー、設定ファイル、Redis のコネクション等を持ち回す予定。
テンプレートエンジン
Jinja2 というか Django なテンプレートエンジン。
フィルタとか自分で作れそうなのが良い。
Jinja2 の `set var` みたいなのがテンプレートの中で出来たら良いんだけど、出来ないのでそれはあきらめる。
設定ファイル
これで良い。
最初使い方が良くわからなかったけど、サンプル探して読んだら出来た。
ログ
プロダクションで使う場合ログはきちんとしたい。
標準のはシンプルなので、保守運用の場合にもう少し高機能なのが欲しい。
開発時は Stdout とファイルに出力してほしい。
io.MultiWriter 使えとの事なので、以下のようにした。
logf, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) out := io.MultiWriter(os.Stdout, logf) logger := logrus.Logger{ Formatter: &logrus.TextFormatter{DisableColors: true}, Level: level, Out: out, }
logrus にはローテーション機能はなくて、logrotate(8) を使えとなっているが、OS ではなくてアプリケーションで制御したい場合もあるので、そういう場合は natefinch/lumberjack ? GitHub を使えば良さそう。
使わなかったもの
フォーム
WTForm みたいなのらしい。
ORM
どれが良いんだろう。
JSON
i18n
Pongo2 と連動してたら良いんだけど、自分で連携するものを作る必要あり。
Redis
Session
sessions - Gorilla, the golang web toolkit
Memcahced
Graceful restart
もっともこれ使う場合は、goji の graceful shutdown と被らないように作らないといけない。
アセット管理?
他にも色々試したら追記していく。
- 16 http://t.co/IGXYPDNQpQ
- 3 https://www.google.co.jp/
- 2 http://b.hatena.ne.jp/
- 1 http://api.twitter.com/1/statuses/show/584746712025018368.json
- 1 http://api.twitter.com/1/statuses/show/584771247050919936.json
- 1 http://b.hatena.ne.jp/entrylist/hatena/はてなブログ
- 1 http://blog.kjirou.net/p/3319
- 1 http://flynxapp.com
- 1 http://pipes.yahoo.com/pipes/pipe.run?_id=GIrKG64H3hGKIBrg6icw5g&_render=rss
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCwQFjAF&url=http://d.hatena.ne.jp/heavenshell/20150405/1428246633&ei=41IhVcS_G4-3wASRJA&usg=AFQjCNHj4Z6e_NB2RsGGReoVBiVjVxbrtw