Go 框架三件套详解(Web/RPC/ORM)|青训营笔记

65 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

一、Gorm

Gorm 是一个已经迭代了10年+的功能强大的 ORM 框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展。

Gorm 使用名为ID的字段作为主键,使用结构体的蛇形负数作为表名,字段名的蛇形作为列名,使用 CreatedAt、UpdatedAt字段作为创建、更新时间。

image.png GORM 目前支持 MySQL、SaLServer、PostgreSQL、 SQLite。

image.png GORM 通过驱动来连接数据库,如果需要连接其它关型的数据库,可以复用/自行开发驱动。

  • First 的使用踩坑

使用 First 时,需要注意查询不到数据 会返回 ErrRecordNotFound。 使用 Find 查询多条数据,查询不到数据不会返回错误。

  • 使用结构体作为查询条件 当使用结构作为条件查询时,GORM 只会查询非零值字段。这意味着如果您的字段值为 0、〝、false 或其他 零值,该字段不会被用于构建查询条件,使用 Map 来构建查询条件。

image.png 使用 Struct 更新时,只会更新非零值,如果需要更新零 值可以使用 Map 更新或使用 Select 选择字段。

image.png GORM 提供了 gorm.DeletedAt 用于帮助用户实现软删

拥有软删除能力的 Model 调用Delete 时,记录不会被从数据库中真正删除。但 GORM 会将 DeletedAt 置为当前时间,并且你不能再通过正常的查询方法找到该记录。

使用 Unscoped 可以查询到被软删的数据

Gorm 提供了 Begin、Commit、Rollback 方法用于使用事务

Gorm 提供了 Tansaction 方法用于自动提交事务,避免用户漏写 Commit、Rollbcak。

二、Kitex

Kitex 是字节内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的主要特点,支持多协议并目拥有丰富的开源扩展。

三、Hertz

Hertz 是字节内部的 HTTP 框架,参考了其他开源框架的优势,结合字节跳动内部的需求,具有高易用性、高性能、高扩展性特点。