KDOC 398: GORMフックはレシーバーがnilになる可能性がある
この文書のステータス
- 作成
- 2025-06-19 貴島
- レビュー
- 2025-06-25 貴島
概要
GORMではHooksを使用できる。これによってCRUD操作の前後の処理を挿入できる。
func (u *User) BeforeDelete(tx *gorm.DB) (error) {
return nil
}
もし Delete() にスライスのUserを渡し一括で削除しようとすると、フックは1度だけ実行され、レシーバはnilになる。
直感的ではないが、こうなっていなければ1件1件削除するたびにモデル情報を取得する必要があり、パフォーマンスの問題になるだろう。
関連
抽象。
- 1件ずつ呼ばれると思ったしくみが、一括処理では1度しか呼ばれず前提が崩れる
- 性能のために、直感的でない挙動を選んでいる
関連。
- 類推: KDOC 182: ブロックサイズの違いによるパフォーマンスへの影響を調べる。1件ずつ処理すると、回数ぶんの固定コストで遅くなる点が共通