0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Goのgormってなんぞや

Last updated at Posted at 2025-11-27

GORMとは

Go言語向けのORM(Object Relational Mapping)ライブラリのひとつ.
データベース操作(SQL)をGoの構造体を使って簡単に扱えるようにするツール.

ORMとは

Object Relational Mappingの略で,
SQL文を書く必要があるのをGoの関数と構造体だけでDBを扱えたりする.
つまり,SQLを直接書かずにデータベース操作ができる仕組み.

GORMにできることの具体例

  • SELECT:db.Find(&users)
  • WHERE 条件検索:db.Where("name = ?", "Bob").First(&user)
  • INSERT:db.Create(&user)
  • UPDATE:db.Model(&user).Update("Age", 20)
  • DELETE:db.Delete(&user)
  • 自動マイグレーション:db.AutoMigrate(&User{})
  • SQL実行エラーの取得:result.Error

&userにおいて&を使う理由は,

GROMを使うメリット

  • SQLをほぼ書かなくてもよい:Goの構造体で操作
  • 型安全:コンパイル時に型ミスを検出できる
  • メンテしやすい:ロジックがGo内に統一される
  • DB移行が楽:PostgreSQLやMySQLなどの切り替えが簡単
  • マイグレーション機能:テーブル作成や更新を自動化できる

実際のコード例

構造体

models/user.go
type User struct {
    ID    uint
    Name  string
    Email string
}

取得例

var users []User
db.Find(&users)

保存例

db.Create(&User{Name: "Taro", Email: "taro@example.com"})

使い方

setupRouterの引数の型指定でGORMが管理するデータベースへ接続ができる.
これをRepositoryに渡すことで,
Controller → Service → Repository → GORM → DB
という流れでDB操作を行う.

GORMの型名の説明

gorm.DBのDBとは何か

これはデータベース接続とデータベース操作に必要な機能全てを保持した構造体のこと.
DBはGORMが提供するデータベース操作用インスタンスを表す型名.
この中には

  • DB接続情報:DSN/host/port/user/password
  • コネクションプール:同時接続数の管理
  • SQL実行機能:Find,Create,Where,Delete等
  • エラー情報:result.Error
  • Logger:SQLログ

などのようなものがあり,これらはGORMの内部のコードを見るとこのようにstructとして定義されている.

type DB struct {
    Config        *Config
    Statement     *Statement
    RowsAffected  int64
    Error         error
    ...
}

gormとともによく用いるgin.Engineとは何か

Webサーバー本体(リクエストの受付・ルーティング・ミドルウェア管理などを統括する中心部)
Engineは「エンジン=動力の中心」という意味で,Gin Webフレームワークにおけるアプリケーション本体を指す.

gin.Engineが持っている機能として以下のものがある.

  • HTTPリクエスト受付:ServeHTTP()
  • ルーティング設定:GET,POST,PUT,DELETE
  • ルートツリー構造:パスとハンドラの対応表
  • ミドルウェア管理:Use()
  • JSON出力機能:c.JSON()

内部構造の一部は以下のようになっている.

type Engine struct {
    RouterGroup
    trees            methodTrees
    maxParams        uint16
    ...
}

これら二つの扱い方

以上の二つは,ポインタ型で扱うべきである.理由として

  • *gorm.DB:DB接続は一つだけ共有したい・コピーすると混乱と負荷
  • *gin.Engine;Webサーバー本体を全体で共有したい・コピー不可能
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?