はじめに
朝の体操シリーズは、プログラミング言語などを習熟するためのトレーニングメニューです。
今回は、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
+ }
おわりに
飽きるくらいまで繰り返しやれば身につくかなと思います。