2014年7月20日日曜日

Golang Cafe #38

7/13(日)に開催された「Golang Cafe #38」に参加してきました。

参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、+Hideki Matsuda さん、私の4名でした。

今回は「Gorilla web toolkit」のmuxパッケージを叩きました。

muxパッケージの説明に「powerful URL router and dispatcher(強力なURLルータとディスパッチャー)」と記述されており、私はここで初めて「URLルータ」という言葉を聞きました。

コーディングをしてみて、「URLルータ」とは「リクエストパラメータなどを元にして遷移先のURLを作成(=ルーティング)するもの」と解釈しました。

muxパッケージのOverviewを参考に、net/httpを使った簡易Webサーバーを作成して動作を確認して行きました。

コーディングの終盤で「mux.Vars()」で扱うパラメータをURL用ではなく画面からの引数と勘違いしていたのに気付いたため、進捗はかなり悪いものとなりました。
# <TEXTARE>ダグを使った画面があるのは、その時の「なごり」です(^^;)

エラーコードが404の時に自作のエラー画面を表示するには、NotFoundHandlerに自作のエラー画面のハンドラー関数を設定すれば実現できることを教えて頂いたので実装してみました。
以下、作成したコードです。
# Overviewのままなので参考にならないかと。自分用メモとして。

package main

import (
        "bytes"
        "fmt"
        "github.com/gorilla/mux"
        "net/http"
)

func main() {
        r := mux.NewRouter()
        r.NotFoundHandler = http.HandlerFunc(NotFoundHandler)
        r.HandleFunc("/", HomeHandler)
        r.HandleFunc("/gorilla/{key}", InputHandler)
        http.Handle("/", r)
        http.ListenAndServe(":8080", nil)
}

func NotFoundHandler(w http.ResponseWriter, r *http.Request) {
        bs := bytes.NewBufferString("")
        bs.WriteString("<h1>Not Found!</h1>\n")
        bs.WriteString("<a href=\"/\">Top</a>")
        fmt.Fprintf(w, bs.String())
}

func HomeHandler(w http.ResponseWriter, r *http.Request) {
        bs := bytes.NewBufferString("")
        bs.WriteString("<h1>Hello Gorilla!</h1>\n")
        bs.WriteString("<a href=\"/gorilla\">Nothing</a><br>\n")
        bs.WriteString("<a href=\"/gorilla/input\">Input</a>")
        fmt.Fprintf(w, bs.String())
}

func InputHandler(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
        key := vars["key"]
        output(w, key, "")
}

func output(w http.ResponseWriter, title, value string) {
        bs := bytes.NewBufferString("")
        bs.WriteString("<h1>%s</h1>\n")
        bs.WriteString("<form action=\"/gorilla/output\" method=\"POST\">\n")
        bs.WriteString("<textarea name=\"message\">%s</textarea><br>\n")
        bs.WriteString("<input type=\"submit\" value=\"Go!\">\n")
        bs.WriteString("</form>")
        fmt.Fprintf(w, bs.String(), title, value)
}

ちなみに、上記のコードを「gori_mux.go」といったファイル名で保存して、黒い画面で「go run gori_mux.go」と入力してWebサーバーを起動させて、Webブラウザーで「http://127.0.0.1:8080/」にアクセスすると動作確認できます。

次回(1〜2時間後:^^;)はGorillaのsessionsやcontextのパッケージを叩くようです。

0 件のコメント: