とてもつらい

プログラミングと本のメモ

goのxormを使ってみた

goでDBを操作する処理を作る必要があったので、orマッパーにxormを使ってみた

go自体始めて書くし、xormの日本語のドキュメントないしでくっそ辛かったのでメモ

orマッパーの比較

orマッパーに求めるものも同じ感じだったので、以下のブログを参考にした www.pospome.work

エウレカがgo使っててイケてる企業ってイメージだったので、エウレカで使ってるxormにした

使うためにやること

orマッパーでマッピングするまでに詰まったのは以下の2つ

  1. DBに接続する
  2. 構造体を作る
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とかを使ったらおそらく別の問題が生じると思うので、その時は頑張ってほしい