概要
Go言語でデータベース操作を行う際、Gormを利用したモデル構築は非常に重要です。この記事では、新聞を管理するモデルを例に、Gormを活用したモデルの作り方を徹底解説します。
この記事を読めば以下のことがわかります:
- Gormを用いた基本的なモデル構築方法
- JSON変換機能の実装例
- Create、Read、Update、Delete(CRUD)操作の方法
モデル構築の基本:Gormの活用
Gormでは、データベースのテーブルとGoの構造体を対応させることで、SQLを書くことなくデータを操作できます。
以下は「Newspaper(新聞)」モデルの実装例です。
新聞モデルの定義
以下のコードは、Newspaperモデルを定義し、Gormを利用したCRUD操作を実現しています。
package models
import (
"encoding/json"
"go-api-newspaper/api"
)
type Newspaper struct {
ID int
Title string
ColumnName string
}
// 構造体をJSONに変換する
func (a *Newspaper) MarshalJSON() ([]byte, error) {
return json.Marshal(&api.NewspaperResponse{ // api.NewspaperResponse に詰め替える
Id: a.ID,
Title: a.Title,
ColumnName: a.ColumnName,
})
}
コード解説
MarshalJSON
で構造体をJSONに変換
Goでは、MarshalJSON
をカスタマイズすることで、構造体のJSON表現を自由に変更できます。この例では、別の構造体 api.NewspaperResponse
に詰め替えています。
func (a *Newspaper) MarshalJSON() ([]byte, error) {
return json.Marshal(&api.NewspaperResponse{
Id: a.ID,
Title: a.Title,
ColumnName: a.ColumnName,
})
}
CRUD操作の実装
以下は、新聞モデルに対してCRUD操作を行う関数群です。
新聞の作成(Create)
func CreateNewspaper(title string, columnName string) (*Newspaper, error) {
newspaper := &Newspaper{
Title: title,
ColumnName: columnName,
}
if err := DB.Create(newspaper).Error; err != nil {
return nil, err
}
return newspaper, nil
}
解説:
-
DB.Create
を利用して新しい新聞レコードをデータベースに保存します。 - 保存された結果を返します。
新聞の取得(Read)
func GetNewspaper(ID int) (*Newspaper, error) {
var newspaper = Newspaper{}
if err := DB.First(&newspaper, ID).Error; err != nil {
return nil, err
}
return &newspaper, nil
}
解説:
-
DB.First
を利用してIDで新聞を検索します。 - レコードが見つからない場合はエラーを返します。
新聞の更新(Update)
func (a *Newspaper) Save() error {
if err := DB.Save(&a).Error; err != nil {
return err
}
return nil
}
解説:
-
DB.Save
を使用して、現在のオブジェクトをデータベースに保存します。 - 更新が成功すると
nil
を返します。
新聞の削除(Delete)
func (a *Newspaper) Delete() error {
if err := DB.Where("id = ?", &a.ID).Delete(&a).Error; err != nil {
return err
}
return nil
}
解説:
-
DB.Where
を利用して条件付きで削除を行います。 - 該当するレコードが見つからない場合はエラーを返します。
まとめ
この記事では、Gormを利用した新聞モデルの構築方法を紹介しました。以下のポイントを押さえましょう:
- 構造体の定義を通じてテーブル操作をシンプル化
- カスタムJSON変換でAPIの柔軟性を向上
- Gormを利用したCRUD操作の実装
この記事のコードを活用して、あなたのプロジェクトで効率的なモデル設計を実現してください!