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フィードバックを取得できます。ローカル設定は不要です。