go-xormを使ってスキーマからstructの自動生成

Golangは静的型付け言語なのでjsonをパースするときとかにはけっこう骨が折れる。

何行もstructを書かなくてはいけないのは結構めんどくさくて、JSON-to-Goとかでjson用のstructを自動生成して書きがち。

DBとかのスキーマも同じで、structの後ろの属性等で色々と設定しなくてはいけないことが多々ある。

別に 俺は全部手書きでやってやらあ!!! という人はいいんですが、僕はめんどくさがり屋なので色々と自動生成してくれる君を使うことが多い。

今回は、そのようなスキーマからstructを自動生成してくれるものの使い方を自分のメモ代わりに書く。

使うもの

go-xormのコマンドラインツールを使う。

xormはGolangのORMモデルの一つで、エウレカさんが作った、マッチングアプリのペアーズなどでも実際に使われているある程度メジャーなもの。

今回はコマンドラインツールの方を使う。

インストール

$ go get github.com/go-xorm/cmd/xorm

これで基本はOK。

もし以前にgo-xormを入れていて、

 cannot use "github.com/go-xorm/cmd/xorm/vendor/github.com/go-xorm/core".LOG_UNKNOWN (type "github.com/go-xorm/cmd/xorm/vendor/github.com/go-xorm/core".LogLevel) as type "github.com/go-xorm/core".LogLevel in argument to engine.Logger().SetLevel

みたいなエラーが出た際には、

cmd/xorm/vendor/github.com/go-xorm/

を消して、またインストールしなおせば行けるはず。

go-xormでの同様のissue

入ったら後はやるだけ。

なお、対応しているDBは

の5種類のみ、個人的に使っているのはmysqlのみなのでいいかなという感じ。

ちなみに、Golang以外にもC++に対応している模様。

実際に使う。

使う際にはテンプレートファイルをコピーしてくる。

プロジェクトルートとかで

$ cp -r $GOPATH/src/github.com/go-xorm/cmd/xorm/templates/goxorm/ ./xorm-template

上記のコマンドを打ち、テンプレートファイルを手元に持ってくる。

テンプレートファイルから自動生成してくれるっぽい。

mysqlでの例

mysqlをローカルホストの3306で動かしていて、ユーザー名 root パスワードpasswordにしている時に、hogedbのスキーマのモデルを得るは以下のようにする。

xorm reverse mysql "root:password@tcp(localhost:3306)/hogedb" xorm-template

これでディレクトリ直下に models/hogedb.goというファイルが生成されているはず。