Go言語のwebフレームワーク「martini」でゲストブックアプリケーションを作ってみた
このあいだ「Beego」を使って作ったゲストブックアプリケーションをそのまま「Martini」でも作ってみた。
Martini - Classy web development in Go.
インストール
$ go get github.com/codegangsta/martini
とりあえず動かす
Beegoよりも更にシンプルな感じ。アプリの雛形を作成するようなコマンドラインツールは無い。
package main import "github.com/codegangsta/martini" func main() { m := martini.Classic() m.Get("/", func() string { return "Hello world!" }) m.Run() }
ゲストブックアプリケーション
martini-contribに追加機能が用意されている。
必要であれば追加インストールする形式。
$ go get github.com/codegangsta/martini-contrib/render
ORマッパーは用意されていない。自分で使いたいパッケージをインストールする。
gorpを使ってみた。
$ go get github.com/coopernurse/gorp $ go get github.com/go-sql-driver/mysql
main.goだけ貼り付け。sinatraみたいな感じ。
package main import ( "github.com/codegangsta/martini" "github.com/codegangsta/martini-contrib/render" _ "github.com/go-sql-driver/mysql" "html/template" "net/http" "time" ) type Greeting struct { Id int64 Name string `sql:"size:100"` Comment string `sql:"size:200"` CreateAt int64 } func main() { m := martini.Classic() // 静的ファイルの利用 m.Use(martini.Static("static")) // テンプレート関数の登録 m.Use(render.Renderer(render.Options{ Funcs: []template.FuncMap{{ "nl2br": nl2br, "htmlquote": htmlquote, "str2html": str2html, "dateformat": dateformat, }}, })) // データベース初期化 dbmap := initDb() defer dbmap.Db.Close() // トップページ m.Get("/", func(w http.ResponseWriter, r *http.Request, render render.Render) { var greetings []Greeting _, err := dbmap.Select(&greetings, "select * from greetings order by CreateAt desc") if err != nil { panic(err) } render.HTML(200, "index", greetings) }) // 投稿 m.Post("/post", func(w http.ResponseWriter, r *http.Request, render render.Render) { greeting := Greeting{ Name: r.FormValue("name"), Comment: r.FormValue("comment"), CreateAt: time.Now().UnixNano(), } dbmap.Insert(&greeting) render.Redirect("/", 302) }) m.Run() }
ソースはgithubにおいた
yuhei0718/martini-guestbook
herokuで動かした
Martini GuestBook