全部学科
Python全栈
python
NodeJS全栈
nodejs

钩子函数与回调机制专题测试

17 题 35 分钟 难度:★★

考察知识点

  • BeforeSave/AfterSave 生命周期钩子
  • BeforeCreate/AfterCreate 创建钩子
  • BeforeUpdate/AfterUpdate 更新钩子
  • 回调注册与执行顺序
💡 参考答案在文末
判断题
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
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 软删除机制专题测试
下一套试卷 → 错误处理与日志专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码