Hatena::ブログ(Diary)

Memo

2015-04-05

[] Golang で Web アプリケーションを作る際のメモ

自分用メモ。

ここら辺を参考にした。

Golang でのウェブ開発を考えてみる - Qiita


cli

codegangsta/cli ? GitHub

ここら辺が鉄板。

ちょっとアレと思ったのが、グローバルオプションの位置がサブコマンドの前に書かないといけない。

$ ./app runserver --config=./setting.hcl とかやる場合は、runserver のオプションにしないと行けない。

あと、グローバルオプションが goji の goji.Serve() と被って困った。


試してないけど良さそうと思ったけど、どうなんだろう。

mitchellh/cli ? GitHub


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 のコネクション等を持ち回す予定。


テンプレートエンジン

flosch/pongo2 ? GitHub

Jinja2 というか Djangoテンプレートエンジン。

フィルタとか自分で作れそうなのが良い。

Jinja2 の `set var` みたいなのがテンプレートの中で出来たら良いんだけど、出来ないのでそれはあきらめる。

設定ファイル

hashicorp/hcl ? GitHub

これで良い。

最初使い方が良くわからなかったけど、サンプル探して読んだら出来た。


ログ

プロダクションで使う場合ログはきちんとしたい。

標準のはシンプルなので、保守運用の場合にもう少し高機能なのが欲しい。

Sirupsen/logrus ? GitHub


開発時は 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 を使えば良さそう。


使わなかったもの

フォーム

bluele/gforms ? GitHub

WTForm みたいなのらしい。

ORM

どれが良いんだろう。

JSON

bitly/go-simplejson ? GitHub

i18n

nicksnyder/go-i18n ? GitHub

Pongo2 と連動してたら良いんだけど、自分で連携するものを作る必要あり。

Redis

garyburd/redigo ? GitHub

Session

sessions - Gorilla, the golang web toolkit

boj/redistore ? GitHub

Memcahced

bradfitz/gomemcache ? GitHub

Graceful restart

facebookgo/grace ? GitHub

もっともこれ使う場合は、goji の graceful shutdown と被らないように作らないといけない。

アセット管理?

jteeuwen/go-bindata ? GitHub


他にも色々試したら追記していく。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/heavenshell/20150405/1428246633