golangのお勉強6


PostgreSQLに接続するためのライブラリ

database/sql

標準

jmoiron/sqlx

構造体を保存

jinzhu/gorm

メジャーなORM library
多機能でRails(CakePHP)的なイメージ

ngorm/ngorm

gormのフォーク。拡張gormと呼ばれるものかな。。

Masterminds/squirrel

SQLを書く時便利

go-gorp/gorp

シンプルなORM

go-xorm/xorm

けっこうスターの数が多い。
gormよりは自由度が高くアソシエーション周りの機能を持たないっぽい。

naoina/genmai

ORMではなくクエリーベース。
標準のオブジェクトを持っていてよびだせるらしい。
レポジトリのドキュメントに一通り例があってわかりやすいかも。

マイグレーションツール

docker、postgresql、を想定してマイグレーションツール。
コンテナを生成するときにマイグレーションを実行して初期化したりできるといいなと。

普通に使うならgoose、awsとか考えるならmattes/migrateとかなのかな。
対応DBMSが多くて特化した対応が微妙ということがないかとか勘ぐりつつ
mattes/migrateをつかってみるか。

参考

mattes/migrateを使って見る

DBMSごとに接続のインターフェイスが違う。。
調べて行くと、postgreのドライバとしてはgithub.com/lib/pqを使っているみたい。
なんか、この辺り安定してない感じがするけどこれになれていくのがいいのかな。
昔perlを手探りしていた頃を思い出すわー。

接続さえしてしまえば、いろいろ共通の記述でできるのかな。。若干不安。
当面はpostgreにしかつかわないはずだけど。

Advanced Usage · GORM Guide
http://jinzhu.me/gorm/advanced.html#sql-builder

pq - GoDoc
http://godoc.org/github.com/lib/pq

gormのマイグレーション機能

サンプルコードがあるので実行してみた
構造体の定義がDB定義になっていてマイグレーションしてくれる

dropTableしなければ定義を毎回構造体に合わせて変更してくれるみたい。。
シンプルなデプロイをするならありなのか。。

なるほど、コードとは一体だと考えていいならこの方が整合性があるかしら。。
「コードファースト」という考え方なのかな。。
ActiveRecord的ともいうのかな。。

Go言語でのORMを色々検討してみた - タオルケット体操
http://hachibeechan.hateblo.jp/entry/2015/03/25/Go%E8%A8%80%E8%AA%9E%E3%81%A7%E3%81%AEORM%E3%82%92%E8%89%B2%E3%80%85%E6%A4%9C%E8%A8%8E%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F

genmaiがオススメってお話なのかな

プロトタイピングするときとかはマイグレーションよりも小回りが利きそうな気がする。。

gormの使い方

構造体の定義のこめんとでjsonとgormの両方の項目について記述してる。なるほど。

Go言語からORMマッパーをつかってMysqlを操作する - OngaLog
http://onga-tec.hatenadiary.jp/entry/2016/08/09/030319

jsonデータ型の扱い。

GolangでPostgreSQLのJSONデータ型を読み書きする - Qiita
http://qiita.com/qube81/items/8d4a766280c25d0ef16c

gorpってなんだ

メジャーでシンプルなormパッケージという印象。
xormについても特徴の説明がわかりやすい

Go言語でORマップ - Qiita
http://qiita.com/awakia/items/d3f216cbb7aa14a2eca1

xorm

gormが無難だけどxormも悪くなさそう。
ngormというフォークに言及あり。

golang + mysql の ORM を色々調べた感想とおすすめ - pospomeのプログラミング日記
http://pospome.hatenablog.com/entry/2017/02/18/172307

genmaiの拡張

Genmai と Gorp プチ比較 + おまけ - Qiita
http://qiita.com/jyagaimo_qiita_/items/707b53722b42e8c6eae9

接続情報

GORMの接続情報をtomlで設定できるようにした · polidog lab++
https://polidog.jp/2016/08/09/golang_gorm1/

結局

一旦、gormをつかってみて考えよう。
マイグレーションをどうするか。。
プロトタイピングではgormで、区切りでmattes/migrateとか?
合わせてメモリ上のsqliteで?sql.Open("sqlite3", ":memory:")