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でシンプルかつ効率的なモデル構築方法を学ぶ!新聞モデルを例に解説

Posted at

概要

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操作の実装

この記事のコードを活用して、あなたのプロジェクトで効率的なモデル設計を実現してください!

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?