😽
GORM Genで解決:interface{}を使わない100%型安全なGo ORM
はじめに
私は今まで、interface{}の多用による型安全性の欠如を懸念して、GORMの選択を避け、型安全なクエリを生成するORMを選択していました。
// 従来のGORMの問題例
var users []User
db.Where("age > ?", 18).Find(&users) // コンパイル時に型チェックができない
GORM Gen は、この問題を完全に解決する「100% Type-safe DAO API without interface{}」を実現するコード生成ツールです。
GORM Genの特徴
-
100%型安全:
interface{}を使わない完全な型安全性 - コード生成: データベーススキーマから自動的にGoコードを生成
- 直感的なAPI: SQLライクな記述でクエリを構築
型安全性の実現
GORM Genを使用すると、以下のような型安全なクエリが書けます:
// 生成されたクエリを使用
u := query.User
users, err := u.WithContext(ctx).
Where(u.Age.Gt(18)). // age > 18 - 完全に型安全
Where(u.Status.Eq("active")). // フィールド名の typo も検出
Order(u.CreatedAt.Desc()).
Find()
従来のGORMと比較して:
- コンパイル時エラー検出: フィールド名の typo や型の不整合を事前に発見
- IDE支援: オートコンプリートとリファクタリングが完全にサポート
- 型安全な結果: 戻り値も完全に型付けされている
さいごに
実践では利用したことがありませんが、GORMとの併用もできるようなので、既にGORMを使っているプロジェクトに関わることがあれば、試してみたいと思いました。
Discussion