首页/ 学科题库/ gorm/ 钩子函数与回调机制专题
gorm 专题精讲

钩子函数与回调机制专题

1 篇文章 17 道配套习题

钩子函数与回调机制专题

专题说明

本专题深入讲解 GORM 钩子函数(Model Hooks)和回调机制(Callbacks),包括 BeforeCreate/AfterSave 等生命周期钩子、回调链的构建与扩展、钩子触发时机与顺序控制,帮助实现数据校验、自动填充、审计日志等功能。

学习目标

  1. 掌握 GORM 模型钩子的定义方法和调用时机
  2. 理解回调链的内部结构和扩展方式
  3. 学会使用钩子实现数据校验、自动填充和审计
  4. 掌握钩子中的事务和错误处理技巧

学习内容

本专题涵盖以下知识点:

  • 模型钩子(BeforeCreate/AfterCreate/BeforeSave/AfterSave 等)
  • 钩子的返回值与错误处理
  • 回调链的注册、替换和移除
  • 钩子与事务的交互
  • 跳过钩子的方法(Session 配置)

学习建议

  1. 区分模型钩子和回调链的差异:钩子绑定在模型上,回调链绑定在 DB 实例上
  2. 钩子中返回错误会中断整个操作流程
  3. 批量操作时钩子的触发行为与单条操作不同,注意验证

配套习题(17 题)

参考答案在文末
判断题
1
判断题

db.Unscoped().Delete(&user) 也会触发 BeforeDelete 和 AfterDelete 钩子。

A

对

B

错

单选题
2
单选题

BeforeUpdate 钩子在什么时候被调用?

A

在 Save 方法执行前

B

在 Update/Updates 方法执行前

C

在数据库事务提交前

D

A 和 B 都正确

3
单选题

AfterFind 钩子的主要用途是什么?

A

在查询后修改返回的数据

B

在查询前添加过滤条件

C

预加载关联数据

D

记录查询日志

4
单选题

BeforeUpdate 钩子适合用于以下哪个场景?

A

记录更新前的数据到审计日志

B

设置创建时间

C

删除关联数据

D

初始化默认值

5
单选题

GORM 的 BeforeCreate 钩子在什么时候被调用?

A

在记录插入数据库之前

B

在记录插入数据库之后

C

在记录更新之前

D

在记录删除之前

6
单选题

BeforeDelete 钩子在什么情况下会被调用?

A

执行软删除时

B

执行硬删除时

C

软删除和硬删除都会

D

只有使用 Unscoped 时

7
单选题

BeforeDelete 钩子的主要用途是什么?

A

在删除前执行清理逻辑,如删除关联文件

B

阻止删除操作

C

记录删除日志

D

A 和 C 都可以

8
单选题

GORM 的 AfterFind 钩子在什么时候被调用?

A

在执行查询 SQL 之前

B

在数据从数据库加载后,映射到结构体之前

C

在数据从数据库加载后,映射到结构体之后

D

在查询完成后返回结果前

多选题
9
多选题

以下关于更新钩子的描述,哪些是正确的?

A

BeforeUpdate 在 Updates 和 Save 方法时都会调用

B

钩子中可以修改字段值

C

如果钩子返回错误,更新会被中止

D

AfterUpdate 无法修改字段值

10
多选题

以下哪些场景适合使用 AfterFind 钩子?

A

对加密字段进行解密

B

计算并填充派生字段

C

加载关联数据

D

校验查询结果

11
多选题

在 AfterUpdate 钩子中可以执行数据库操作吗?

A

可以,使用 tx 参数

B

可以,但不能影响主事务

C

不可以,会死锁

D

可以,但需要小心避免递归

12
多选题

以下哪些场景适合使用删除钩子?

A

删除用户时级联删除关联的订单数据

B

记录删除操作到审计日志

C

释放用户占用的资源

D

在软删除时备份数据

13
多选题

以下哪些场景适合使用 BeforeCreate 钩子?

A

为新用户生成默认头像 URL

B

对密码字段进行加密

C

发送注册成功邮件

D

校验用户名长度

14
多选题

以下哪些场景适合使用 AfterFind 钩子?

A

将数据库中的 JSON 字符串解析为 Go 结构体

B

对密码字段进行脱敏处理

C

在查询前添加 WHERE 条件

D

加载额外的关联数据

填空题
15
填空题

GORM 的钩子执行顺序为:钩子 -> 执行SQL -> 钩子。如果 Before 钩子返回错误,则不会执行 SQL 和 After 钩子。

16
填空题

定义 GORM 钩子的方法是实现方法,如果返回错误则会插入操作。

17
填空题

GORM 钩子方法的标准签名为 func (m *Model) (tx *) error。

参考答案
1.正确 2.D 3.A 4.A 5.A 6.C 7.D 8.C 9.A;B;C 10.A;B 11.A;B;D 12.A;B;C;D 13.A;B;D 14.A;B;D 15.Before;After 16.BeforeCreate(tx *gorm.DB) error;中止 17.AfterFind;gorm.DB
想在手机上刷这套专题的真题?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别二维码,即可解锁本专题全部配套练习与错题本。
了解产品 App
← 上一个专题 软删除机制专题 下一个专题 → 错误处理与日志专题