这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
一、Gorm
Gorm 是一个已经迭代了10年+的功能强大的 ORM 框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展。
Gorm 使用名为ID的字段作为主键,使用结构体的蛇形负数作为表名,字段名的蛇形作为列名,使用 CreatedAt、UpdatedAt字段作为创建、更新时间。
GORM 目前支持 MySQL、SaLServer、PostgreSQL、 SQLite。
GORM 通过驱动来连接数据库,如果需要连接其它关型的数据库,可以复用/自行开发驱动。
- First 的使用踩坑
使用 First 时,需要注意查询不到数据 会返回 ErrRecordNotFound。 使用 Find 查询多条数据,查询不到数据不会返回错误。
- 使用结构体作为查询条件 当使用结构作为条件查询时,GORM 只会查询非零值字段。这意味着如果您的字段值为 0、〝、false 或其他 零值,该字段不会被用于构建查询条件,使用 Map 来构建查询条件。
使用 Struct 更新时,只会更新非零值,如果需要更新零
值可以使用 Map 更新或使用
Select 选择字段。
GORM 提供了 gorm.DeletedAt 用于帮助用户实现软删
拥有软删除能力的 Model 调用Delete 时,记录不会被从数据库中真正删除。但 GORM 会将 DeletedAt 置为当前时间,并且你不能再通过正常的查询方法找到该记录。
使用 Unscoped 可以查询到被软删的数据
Gorm 提供了 Begin、Commit、Rollback 方法用于使用事务
Gorm 提供了 Tansaction 方法用于自动提交事务,避免用户漏写 Commit、Rollbcak。
二、Kitex
Kitex 是字节内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的主要特点,支持多协议并目拥有丰富的开源扩展。
三、Hertz
Hertz 是字节内部的 HTTP 框架,参考了其他开源框架的优势,结合字节跳动内部的需求,具有高易用性、高性能、高扩展性特点。