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/
を消して、またインストールしなおせば行けるはず。
入ったら後はやるだけ。
なお、対応しているDBは
の5種類のみ、個人的に使っているのはmysqlのみなのでいいかなという感じ。
実際に使う。
使う際にはテンプレートファイルをコピーしてくる。
プロジェクトルートとかで
$ 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
というファイルが生成されているはず。