Skip to content

Go 框架三件套详解

1. 三件套的使用

1.1 GORM

注意事项

  • First 使用踩坑:
    • 使用 First 时,需要注意查询不到数据会返回 ErrRecordNotFound
    • 使用 Find 查询多条数据时,查询不到数据不会返回错误
  • 使用结构体作为查询条件:
    • 使用结构体作为条件查询时,GORM 只会查询非零值字段,即当字段值为 0、""、false 或其他零值时,该字段不会被用来构建查询条件
    • 需要使用 Map 来构建查询条件
  • 使用结构体更新时,只会更新非零值,如果需要更新零值,可以使用 Map 更新或使用 Select 选择字段

GORM 事务

  • GORM 提供了 BeginCommitRollback 方法用于使用事务。
  • GORM 提供了 Transaction 方法用于自动提交事务,避免用户漏写 CommitRollback

GORM Hook

  • Hook 是在创建、查询、更新、删除等操作之前、之后自动调用的函数;
  • 如果任何 Hook 返回错误,GORM 将停止后续的操作并回滚事务。

性能提高

  • 对于写操作,为了保证数据的完整性,GORM 会将它们封装在事务内运行,但这会降低性能,可以使用 SkipDefaultTransaction 关闭事务;
  • 使用 PrepareStmt 缓存预编译语句可以提高后续调用的速度。

GORM 生态:

1.2 Kitex

使用 IDL 定义服务与接口:

  • Thrift
  • Proto3

Kitex 生态:

1.3 Hertz

Hertz 生态: