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?

GORM 朝の体操(Go言語の ORM)

Last updated at Posted at 2025-01-18

はじめに

朝の体操シリーズは、プログラミング言語などを習熟するためのトレーニングメニューです。
今回は、GORM(Go 言語の ORM)の練習です。
繰り返しやって身につける、またはお手軽に GORM を体験したいという用途でも使えると思います。

※朝の体操シリーズ:React 朝の体操

「GORM 朝の体操」練習環境(Docker 環境)のありか

Github に置きました。
https://github.com/y74h1116/go-gorm-taiso
※README.md にコンテナの起動方法等を記載してありますので頑張って起動してください。

練習環境について

  • 「GORM 朝の体操」練習用の Docker には PostgreSQL と Go 言語の実行環境を含めてあります。
  • PostgreSQL には users テーブルが作られます。
  • Go言語の実行環境には、GORM がインストールされます。
  • GORM で、users テーブルを操作する練習ができます。
  • users テーブルの定義は以下
storage/postgres/init/init.sql
CREATE TABLE "users" (
  "id" BIGSERIAL PRIMARY KEY,
  "user_name" VARCHAR(15),
  "email" VARCHAR(255) /* 練習用に UNIQUE は指定しない */,
  "password" VARCHAR(32),
  "location" VARCHAR(30),
  "created_at" TIMESTAMP DEFAULT current_timestamp,
  "updated_at" TIMESTAMP DEFAULT current_timestamp
);

GORM 朝の体操の内容紹介

  • main.go の下の方に練習問題があるので、そこに実装して → 実行・確認します。

  • 練習:users テーブルにデータを insert しましょう
    main.go に定義済みの変数 db、User 構造体を利用します。

main.go
// DB 接続インスタンス
var db *gorm.DB

// User 構造体 (users テーブルのモデル)
type User struct {
	ID        int
	UserName  string
	Email     string
	Password  string
	Location  string
	CreatedAt time.Time
	UpdatedAt time.Time
}

insert するデータを定義して、Create や Save メソッドを実行します。

main.go
+	// 回答例
+	// insert するデータを定義
+	newUser := User{
+		UserName: "taro",
+		Email:    "taro@aaa.com",
+		Password: "password",
+		Location: "tokyo",
+	}

+	// insert 実行
+	err := db.Create(&newUser).Error
+	if err != nil {
+		fmt.Println("err:", err)
+		return
+	}
  • 練習:insert したデータの id を表示しましょう
    db.Create が成功すると newUser.ID が設定されるので、fmt.Println で表示します。
main.go
+	// 回答例
+	fmt.Println("id:", newUser.ID)
  • 練習:insert したデータを select で取得してみましょう
    作成したデータを select 文で取得してみましょう
main.go
+	// 回答例
+	user := User{}
+	err = db.First(&user, "id = ?", newUser.ID).Error
+	if err != nil {
+		fmt.Println("err:", err)
+		return
+	}

+	fmt.Println("User:", user)
  • 練習:データの user_name を更新してみましょう
    データの更新を試してみます。
main.go
+	// 回答例
+	user.UserName = "hanako"
+	err = db.Save(&user).Error
+	if err != nil {
+		fmt.Println("err:", err)
+		return
+	}
  • 練習:データを delete しましょう
    データ削除も試してみましょう。
main.go
+	// 回答例
+	err = db.Delete(&user).Error
+	if err != nil {
+		fmt.Println("err:", err)
+		return
+	}

おわりに

飽きるくらいまで繰り返しやれば身につくかなと思います。

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?