GO框架三件套| 青训营笔记

48 阅读2分钟

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

Gorm

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

基本使用

4_1.png

  • 其中model及其表名是gorm的约定
  • gorm使用ID字段的作为主键
  • 结构体的蛇形作为表名
  • 字段名的蛇形作为列名

创建数据

4_2.png

使用upsert

4_3.png

使用默认值

4_4.png

查询数据

4_5.png

  • 使用First时,需要注意查询不到数据会返回ErrRecordNotFound。
  • 使用Find查询多条数据,查询不到数据不会返回错误。
  • 当使用结构作为条件查询时,GORM只会查询非零值字段。这意味着如果您的字段值为0、"、false或其他零值该字段不会被用于构建查询条件,如果要进行零值查询可以使用Map来构建查询条件。

更新数据

4_6.png

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

删除数据

物理删除

4_7.png

软删除

4_8.png

  • GORM提供了gorm.DeletedAt用于帮助用户实现软删除
  • 拥有软删除能力的Mode!调用Delete时,记录不会被从数据库中真正删除。但GORM会将DeletedAt置为当前时间,并且你不能再通过正常的查询方法找到该记录。
  • 使用Unscoped可以查询到被软删的数据

Kitex代码生成工具

安装

 go install github.com/cloudwego/kitex/tool/cmd/kitex@latest
 go install github.com/cloudwego/thriftgo@latest

定义IDL

4_9.png

如果我们要进行RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要知道返回值是什么样的。这时候,就需要通过D儿来约定双方的协议,就像在写代码的时候需要调用某个函数,我们需要知道函数签名一样。

Hertz

基本使用

4_10.png

使用Hertz实现,服务监听8080端口并注册了一个GET方法的路由函数。

路由

Hertz提供了GET、POST、PUT、DELETE、ANY等方法用于注册路由

4_11.png

Hertz提供了路由组(Group)的能力,用于支持路由分组的功能

4_12.png