0Pricing
Go Academy · レッスン

CRUD操作

作成、読み取り、更新、削除を行います

「CRUD操作」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

GORMでのCRUD

GORMでは、基本的な4つの操作であるCreate、Read、Update、Deleteを、*gorm.DB のメソッド呼び出しとして扱えます。構造体へのポインタを渡すと、GORMがSQLを組み立てます。

作成

Create はレコードを挿入します。実行後、GORMはデータベースから構造体の主キーとタイムスタンプを設定します。

user := User{Name: "Ada", Email: "ada@example.com"}
result := db.Create(&user)
fmt.Println(user.ID, result.RowsAffected)

Firstによる読み取り

First は、主キー順で並べた最初の一致レコードを取得します。結果を受け取るにはポインタを渡し、条件は追加の引数として指定します。

var user User
db.First(&user, 1)               // by primary key
db.First(&user, "email = ?", "ada@example.com")

Findによる複数件の読み取り

Find は複数の行をスライスに読み込みます。条件を指定しない場合はすべての行を返し、Where を使うと絞り込めます。

var users []User
db.Where("age > ?", 18).Find(&users)

更新

Save はレコードのすべてのフィールドを更新します。Update と Updates は特定のカラムだけを変更するため、意図していないフィールドを上書きせずに済みます。

db.Model(&user).Update("name", "Ada L.")
db.Model(&user).Updates(User{Name: "Ada", Age: 36})

ゼロ値に関する注意点

構造体を使って更新する場合、GORMはゼロ値のフィールド(0、false、"")を無視します。カラムをゼロ値に更新するには、構造体ではなくmapを渡してください。

db.Model(&user).Updates(map[string]interface{}{"age": 0, "active": false})

削除

Delete はレコードを削除します。モデルにDeletedAtフィールドがある場合は、行を削除する代わりにタイムスタンプを設定するソフトデリートになります。

db.Delete(&user, 1)

実行可能なCRUDのシミュレーション

GORMには実際のデータベースが必要です。そのため、この実行可能な例では、メモリ上のスライスに対して作成、読み取り、更新、削除を行い、ライフサイクルを示します。

package main

import "fmt"

type User struct {
    ID   int
    Name string
}

func main() {
    var users []User
    next := 1
    // Create
    u := User{ID: next, Name: "Ada"}
    users = append(users, u)
    next++
    // Read
    fmt.Println("read:", users[0])
    // Update
    users[0].Name = "Ada L."
    fmt.Println("updated:", users[0])
    // Delete
    users = users[:0]
    fmt.Println("count after delete:", len(users))
}

エラーの確認

GORMのすべての呼び出しは、Error フィールドに失敗内容を保持する *gorm.DB を返します。Firstでレコードが見つからない場合は、gorm.ErrRecordNotFound が返されます。

if err := db.First(&user, 99).Error; err == gorm.ErrRecordNotFound {
    fmt.Println("no such user")
}

メソッドチェーン

GORMでは、チェーン可能なビルダーを使います。db.Where(...).Order(...).Limit(...).Find(&users) のように記述します。各メソッドでクエリを絞り込み、最後のメソッド(Find、First)が実行します。

一括挿入

Create にスライスを渡すと、1つのステートメントで複数の行を挿入できます。CreateInBatches は非常に大きなスライスを分割して処理し、上限に収まるようにします。

db.Create(&[]User{{Name: "A"}, {Name: "B"}})

理解度チェック

CRUDに関する知識を確認しましょう。

まとめ

CRUD操作について学びました。

  • Createは挿入を行い、主キーを設定します
  • FirstとFindは、それぞれ1行および複数行を読み取ります
  • Save、Update、Updatesは変更を行い、mapを使うとゼロ値も設定できます
  • DeletedAtが存在する場合、Deleteはソフトデリートを行います
  • Errorフィールドを確認し、複雑なクエリにはメソッドチェーンを使います

よくある質問

「CRUD操作」レッスンは無料ですか?

はい。「CRUD操作」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「CRUD操作」で何を学びますか?

作成、読み取り、更新、削除を行います ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「CRUD操作」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. モデルとAutoMigrate
  2. CRUD操作
  3. 関連付け
  4. フックとスコープ
← Go Academyに戻る