goのxormを使ってみた
goでDBを操作する処理を作る必要があったので、orマッパーにxormを使ってみた
go自体始めて書くし、xormの日本語のドキュメントないしでくっそ辛かったのでメモ
orマッパーの比較
orマッパーに求めるものも同じ感じだったので、以下のブログを参考にした www.pospome.work
エウレカがgo使っててイケてる企業ってイメージだったので、エウレカで使ってるxormにした
使うためにやること
orマッパーでマッピングするまでに詰まったのは以下の2つ
- DBに接続する
- 構造体を作る
DBに接続する
とりあえずgithub行って、README読むとこんな感じでDBの接続周りをやってくれるらしい
engine, err := xorm.NewEngine(driverName, dataSourceName)
ここで詰まったのは、dataSourceNameのフォーマットどうなってんねんってことだった
hostとportと指定してとか細かいところまでやってくれてるサンプルを調べた結果こんなコードで動いた
engine, err := xorm.NewEngine("mysql", "user:password@tcp(localhost:3306)/test")
中に関して説明すると以下になる
{ユーザー名}:{パスワード}@{プロトコル(tcp or udp)}({ホスト名(ipでも行けるかも)}:{ポート})/{DB、スキーマ名}
設定しない項目に関してはdefault値でなにかが入るらしいがよくわからんかった
とりあえずこれで細かな設定までできるようになった
構造体を作る
次にマッピング先の構造体を作る 実際に作ったソースはこんな感じ
type User struct{ Id int `xorm:"int 'id"` Name string `xorm:"varchar(256) 'name'"`
この説明が見つけられなくて、全然マッピングしてくれなかった
以下の2.4.Column definitionに書いてあった
Documentation - xorm: Simple & Powerful ORM Framework for Go Programming Language
最低限使うためには以下のように書けばマッピングしてくれる
type {テーブル名} struct {フィールド名(先頭は必ず大文字)} 型 `xorm:"{DB上での型} '{対応するカラム名}"`
あとはREADME通りにやればマッピングしたデータが取得できる
備考
ここに書いてあることはxormのマッパーがデフォルトの場合である
別のSameMapperとかを使ったらおそらく別の問題が生じると思うので、その時は頑張ってほしい