Golang で Web アプリケーションを作る際のメモ
自分用メモ。
ここら辺を参考にした。
Golang でのウェブ開発を考えてみる - Qiita
cli
GitHub - urfave/cli: A simple, fast, and fun package for building command line apps in Go
ここら辺が鉄板。
ちょっとアレと思ったのが、グローバルオプションの位置がサブコマンドの前に書かないといけない。
$ ./app runserver --config=./setting.hcl とかやる場合は、runserver のオプションにしないと行けない。
あと、グローバルオプションが goji の goji.Serve() と被って困った。
試してないけど良さそうと思ったけど、どうなんだろう。
GitHub - mitchellh/cli: A Go library for implementing command-line interfaces.
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 のコネクション等を持ち回す予定。
テンプレートエンジン
GitHub - flosch/pongo2: Django-syntax like template-engine for Go
Jinja2 というか Django なテンプレートエンジン。
フィルタとか自分で作れそうなのが良い。
Jinja2 の `set var` みたいなのがテンプレートの中で出来たら良いんだけど、出来ないのでそれはあきらめる。
設定ファイル
GitHub - hashicorp/hcl: HCL is the HashiCorp configuration language.
これで良い。
最初使い方が良くわからなかったけど、サンプル探して読んだら出来た。
ログ
プロダクションで使う場合ログはきちんとしたい。
標準のはシンプルなので、保守運用の場合にもう少し高機能なのが欲しい。
GitHub - sirupsen/logrus: Structured, pluggable logging for Go.
開発時は 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 ではなくてアプリケーションで制御したい場合もあるので、そういう場合は GitHub - natefinch/lumberjack: lumberjack is a log rolling package for Go を使えば良さそう。
使わなかったもの
フォーム
GitHub - bluele/gforms: A flexible forms validation and rendering library for golang web development.Inspired by django-forms and wtforms.
WTForm みたいなのらしい。
ORM
どれが良いんだろう。
i18n
GitHub - nicksnyder/go-i18n: Translate your Go program into multiple languages.
Pongo2 と連動してたら良いんだけど、自分で連携するものを作る必要あり。
Session
sessions - Gorilla, the golang web toolkit
GitHub - boj/redistore: A session store backend for gorilla/sessions using Redis.
Graceful restart
GitHub - facebookgo/grace: Graceful restart & zero downtime deploy for Go servers.
もっともこれ使う場合は、goji の graceful shutdown と被らないように作らないといけない。
アセット管理?
他にも色々試したら追記していく。
追記
Release MacVim-KaoriYa 20150314 · splhack/macvim-kaoriya · GitHub
次に Golang 用のプラグインをインストールする。
GitHub - google/vim-ft-go
GitHub - vim-jp/vim-go-extra: Extra plugin for golang
vim-jp » vim-go-extra を公開致します。
vimrc に以下を追記する。
" Golang {{{ execute 'set rtp+=' . globpath($GOPATH, 'src/github.com/nsf/gocode/vim') " }}}
:Fmt
とかでフォーマットしたり、C-x C-o とかで補完が出来るようになる。