Golang Cafe #39 まとめ Gorilla web toolkit を試す。 その2
2014/07/20に開催された「Golang Cafe #39」についてのまとめです。
開催からかなり経ってしまいましたが、記録としてまとめておきます。
前回に引き続き今回もGorilla is a web toolkitを試してみる会となりました。
その中から、今回はgorilla/contextとgorilla/sessionsをみてみました。
gorilla/context
本家の説明はこちらのページ。
何ができるのかというと、リクエストスコープで値を保存しておいたり、取得したりできるものという感じでしょうか。
インストールは
$ go get github.com/gorilla/context
でOKですが、前回muxを試したときに一緒にインストールされたかと思います。
前回gorilla/muxを試してみましたが、
ハンドラ内で解析されたURLのパラメータを取得する際に、
vars := mux.Vars(request)
としたと思いますが、ソースコードを確認すると、内部で、
context.Get(request, キー)
のようなことをしています。
おそらくURLを解析した際にパラメータ(名前/値)をコンテキスト(グローバル変数)に入れておき、ハンドラ内から取得するのに使用しているのだと思います。
リクエストスコープで値を保存しておく場所というような感じで良いと思います。(有効時間は設定できそうです)
gorilla/sessions
本家の説明はこちらのページ。
本家の説明を参照すると「クッキーやファイルシステムを使用したセッションや、カスタムセッションのインフラを提供してくれる」らしい。
いわゆるセッションです。
リクエストを跨いで値を保持することができます。その保存先がクッキーやらファイルシステムやらということだと思います。
インストールは他と同じです。
$ go get github.com/gorilla/sessions
本家と同じようなサンプルになりますが載せておきます。
const SESSION_NAME = "session-name" func main() { r := mux.NewRouter() r.HandleFunc("/set", MyHandler) r.HandleFunc("/get", MyHandler2) http.Handle("/", r) http.ListenAndServe(":8080", nil) } var store = sessions.NewCookieStore([]byte("something-very-secret")) func MyHandler(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, SESSION_NAME) session.Values["foo"] = "bar" session.Values[42] = 43 session.Save(r, w) w.Write([]byte("MyHandler")) } func MyHandler2(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, SESSION_NAME) fmt.Println(session.Values["foo"]) fmt.Println(session.Values[42]) w.Write([]byte("MyHandler2")) }
sessions.NewCookieStore でクッキーを使用するセッションストアを定義しておき、store.Getで取り出します。既存のセッションがない場合は作成されます。session.Saveで保存します。
セッションをクリアするには、context.Clear(request)を呼ぶようです。(すいません、未確認です)
基本的なセッションの機能は提供されているので、あとは各々実装すれば良いと思われます。