golangのフレームワークkochaを使ってみた その1
経緯
golangを学習し始めて2週間〜3週間くらい、
ちょっとわかってきたので
そろそろフレームワーク使ってみたいなと思い調べ始めた。
ちなみにgolangの学習は下記のページや書籍など
A Tour of Go
web上でさくっと出来る
Effective Go — プログラミング言語 Go ドキュメント v0.1 documentation
ドキュメントてきな
Go For Perl Mongers
すごくためになった
taizo - Qiita
会社の先輩のqiita初心者がつまずく点がいっぱいまとまってあった
Amazon.co.jp: 基礎からわかる Go言語: 古川 昇: 本
基本的なことはこれ読めばわかる気がする
kochaを選択した理由
Kocha web application framework for Go
サンプルをチラっと見た感じだとRailsっぽいじゃんという理由で要はなんとなくです。
強いて言うならRails好きだからです。ちなみに和製らしいです。
ほかにもmartini,revelあたりは使ってみようと思っているので後々記事を書くかもしれない。
serverを立ち上げる
$ go get github.com/naoina/kocha
これでkochaを取得してくる
$ go get github.com/naoina/kocha/cmd/...
これでkochaコマンドが使える
今回はアプリケーション名をexample-kochaで作成します。
※GOPATH部分は各自の環境によってかわります。
$ kocha new example-kocha create directory /GOPATH/src/example-kocha/app/controller create /GOPATH/src/example-kocha/app/controller/root.go create directory /GOPATH/src/example-kocha/app/view/error create /GOPATH/src/example-kocha/app/view/error/404.html.tmpl create /GOPATH/src/example-kocha/app/view/error/500.html.tmpl create directory /GOPATH/src/example-kocha/app/view/layout create /GOPATH/src/example-kocha/app/view/layout/app.html.tmpl create /GOPATH/src/example-kocha/app/view/root.html.tmpl create directory /GOPATH/src/example-kocha/config create /GOPATH/src/example-kocha/config/app.go create /GOPATH/src/example-kocha/config/routes.go create /GOPATH/src/example-kocha/main.go create directory /GOPATH/src/example-kocha/public create /GOPATH/src/example-kocha/public/robots.txt
初めてrails newした時と同じ気持ちを味わえましたね!
serverを立ち上げる
$ cd /GOPATH/src/example-kocha $ kocha run kocha: you can be setting for your app by the following environment variables at the time of launching the app: KOCHA_ADDR="127.0.0.1:9100" Starting... Listening on 127.0.0.1:9100 Server PID: xxxxx
これでhttp://127.0.0.1:9100/にアクセスすると
「Welcome to Kocha」が表示されると思います。
処理の流れをざっくりと追う
config/routes.go内で下記のようにrouting周りの記述されている。
routingを追加する場合はここに追記する感じになるっぽい
var routes = RouteTable{ { Name: "root", Path: "/", Controller: &controller.Root{}, }, }
Path(今回の場合は/)へのアクセスの際にControllerに格納された各controllerを呼ぶ。
Controllerのinterfaceがどのようになっているのかは下記を参照
https://github.com/naoina/kocha/blob/master/controller.go#L27-L64
HTTPの各methodでcontroller側のどのmethodを呼ぶかを解決しているのが下記
https://github.com/naoina/kocha/blob/master/router.go#L93-L121
今回の場合はapp/controller/root.goが対象のcontrollerになり
GETでアクセスしているので下記のmethodが呼ばれる。
func (r *Root) GET(c *kocha.Context) error { return c.Render(map[string]interface{}{ "ControllerName": "Root", }) }
表示されているviewはapp/view/root.html.tmpl
ざっくりしすぎですがこんな感じ
今後
controller, model周りの実装もあるのですが
長くなりそうなのでその2にて書いていきます。
kochaのソースを読むと構成とかとても勉強になる
間違いがあればご指摘いただけますと幸いです。