読者です 読者をやめる 読者になる 読者になる

まっしろけっけ

めもてきなやーつ

golangのフレームワークkochaを使ってみた その2

shiro-16.hatenablog.com
こちらの続き

modelを作成する

今回はmysqlを使用します。
今回作成したtableは下記です。

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

modelを自動生成する。

$ kocha g model user
    create directory app/model
              create app/model/user.go
    create directory db
              create db/config.go

dbのconfigの変更
デフォルトではsqlite3の設定が記述してあるようです。

$ vi db/config.go
- Driver: kocha.Getenv("KOCHA_DB_DRIVER", "sqlite3"),
- DSN:    kocha.Getenv("KOCHA_DB_DSN", filepath.Join("db", "db.sqlite3"))
+ Driver: kocha.Getenv("KOCHA_DB_DRIVER", "mysql"),
+ DSN:    DSN:    kocha.Getenv("KOCHA_DB_DSN", "user:password@/kocha"), // 各時の環境に合わせてuser名とpassword,db名を設定

modelを変更

$ vi app/model/user.go
- Id int64 `db:"pk" json:"id"`
+ Id   int64
+ Name string

controllerを作成

$ kocha g controller users
              create app/controller/users.go
              create app/view/users.html

controllerを変更

$ vi app/controller/users.go
func (us *Users) GET(c *kocha.Context) error {
        var users []model.User
        err := db.Get("default").Select(&users)
        if err != nil {
                return c.RenderError(500, nil, nil)
        }

        return c.Render(map[string]interface{}{
                "ControllerName": "Users",
                "users": users,
        })
}

viewを変更

$ vi app/view/users.html
<h1>This is Users</h1>

<ul>
  {{ range $.users }}
    <li>{{ .Name }}</li>
  {{ end }}
</ul>

動作確認

$ 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"
    KOCHA_DB_DRIVER="mysql"
    KOCHA_DB_DSN="user:password@/kocha"

Starting...

Listening on 127.0.0.1:9100
Server PID: xxxx

上記が表示されたら前回同様http://127.0.0.1:9100/で「Welcome to Kocha」が表示され
http://localhost:9100/usersで「This is Users」 + 「user.nameのリスト」が表示されます。

Routingに関しての補足

routingに関してはcontrollerを作成したときに自動で追記されていました。

var routes = RouteTable{
        {
                Name:       "root",
                Path:       "/",
                Controller: &controller.Root{},
        }, {
                Name:       "users",
                Path:       "/users",
                Controller: &controller.Users{},
        },
}

疑問 + その3に関して

1.Railsのshowとかその他get methodを追加したい場合とかは
各controllerのGETで処理を分岐させたりするのだろうか?

2.Migrationの機能もあるようなのでその辺の使い方

上記2点をその3で書ければいいかなと思っていますが、
その3に関しては未定です...mm