golangでgorillaとかいうのを使ってみる(mux)
ゴリラ?
Gorilla, the golang web toolkit
まあ、http関連のやつでルーティングとかセッションとかを"net/http"よりは柔軟に使える感じのもの
なんか適当に調べたけど"net/http"ではセッションは使えないとかなんとか
ちょっと今回はルーティングの"gorilla/mux"を使用する
インストール
go get github.com/gorilla/mux
実装
今回の構成
. ├── main.go └── templates ├── index.html └── save.html
main.go
package main import ( "net/http" "github.com/gorilla/mux" "fmt" "time" "html/template" ) func main(){ // 生成 r := mux.NewRouter() // "/"の場合の処理 r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // テンプレート tmpl := template.Must(template.New("index").ParseFiles("templates/index.html")) err := tmpl.Execute(w, nil) if err != nil { panic(err) } // logの代わり fmt.Print(time.Now()) fmt.Printf(" path: " + r.URL.Path + "\n") }).Methods("GET") // "/save"の場合の処理 r.HandleFunc("/save", func(w http.ResponseWriter, r *http.Request) { // formの値を取得 r.ParseForm() data1 := r.FormValue("aaa") data2 := r.FormValue("bbb") // テンプレート tmpl := template.Must(template.New("save").ParseFiles("templates/save.html")) err := tmpl.Execute(w, struct { Data1 string Data2 string }{ Data1: data1, Data2: data2, }) if err != nil { panic(err) } // logの代わり fmt.Print(time.Now()) fmt.Printf(" path: " + r.URL.Path + "\n") }).Methods("POST") // 可変URL1 r.HandleFunc("/test1/{sample1}/", func(w http.ResponseWriter, r *http.Request) { // 画面サンプル fmt.Fprintf(w, "sample1\n") // logの代わり fmt.Print(time.Now()) fmt.Printf(" path: " + r.URL.Path + "\n") }) // 可変URL2 r.HandleFunc("/test2/{sample1}/{id:[0-9]{1,6}}/", func(w http.ResponseWriter, r *http.Request) { // 画面サンプル fmt.Fprintf(w, "sample2\n") // logの代わり fmt.Print(time.Now()) fmt.Printf(" path: " + r.URL.Path + "\n") }) // handing http.Handle("/", r) // 設定 http.ListenAndServe(":9001", nil) }
※POST、GETだけを指定したい場合など、また一部のURLが可変になる場合は楽できます。
templates/index.html
{{ define "index" }} <!DOCType html> <html> <head> <meta charaset="utf-8" /> <title>websample1</title> </head> <body> <h3>なんかいれて送信してみて</h3> <form method="post" action="/save"> <input type="text" name="aaa" value="" /><br /> <input type="text" name="bbb" value="" /><br /> <input type="submit" value="送信" /> </form> </body> </html> {{ end }}
templates/save.html
{{ define "save" }} <!DOCType html> <html> <head> <meta charaset="utf-8" /> <title>websample1</title> </head> <body> <h3>送信されたものは以下</h3> <div> aaa = {{ .Data1 }}<br /> bbb = {{ .Data2 }}<br /> </div> <a href="/">top</a> </body> </html> {{ end }}
画面
↓
↓
所感
このツールキットを使用することでネットワーク関連のコードを書くのに結構便利になる感じかと
web アプリを作成するとしたらルーティングとセッションは必須なのできちんとやっておく必要がありそうです。