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

58 阅读2分钟

第五届青训营 」伴学笔记创作活动的第 6 天

这节课主要介绍了 Hertz/ Kitex / Gorm 三个框架的使用。

Gorm

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

image.png

Gorm 的约定(默认)

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

Gorm 支持的数据库如下,也可以自行开发驱动来支持其他类型的数据库

  • MySQL
  • SQLServer
  • PostgreSQL
  • SQLite

1674218291529.png

1674218308043.png

First 的使用踩坑

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

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

image.png

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

1674218463042.png

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

image.png

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

image.png

GORM 在 提供了 CURD 的 Hook 能力

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

image.png

1674218519785.png

Kitex

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

注:Kitex 目前对 Windows 的支持不完善,如果本地开发环境是 Windows 的同学建议使用虚拟机或 WSL2.

1674218571362.png

1674218597733.png

1674218612332.png

1674218644136.png

1674218656143.png

1674218671794.png

Hertx

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

1674218690455.png

1674218701182.png

1674218711591.png

1674218723540.png

1674218734312.png

1674218868839.png

1674218884762.png

1674218895147.png

1674218905758.png