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

134 阅读2分钟

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

Go 框架三件套详解(Web/RPC/ORM)

一、Gorm

Gorm的规范用法能防止SQL注入

  • ID:1111作为一个兜底值当没有查询条件
  • 链式调用记得按照规范
  • Hertz的性能要比Gin高出好几倍
  • 日常开发不适用联表查询对数据库压力较大
  • 尽量不要在for循环中执行sql

GORM 目前支持 MySQL、SQLServer、PostgreSQL、SQLite。

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

  • 通过default标签为字段定义默认值

First的使用踩坑 使用First时,当查询不到数据会返回ErrRecordNotFound,导致某些功能不可用,所以推荐使用find来进行查询

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

事务

事务的操作要从tx开始而不是db

  • Gorm提供了Transcation方法用于自动提交事务,避免用户漏写Commit、Rollback

Gorm自带默认事务防止数据不一致(影响了性能但是)读操作没有事务

image.png

二、Kitex

生成工具对windows的支持不完善

  • 安装代码生成工具
go install github.com/cloudwego/kitex/tool/cmd/kitex @latest
  • 使用IDL定义服务与接口(thrift或其他框架)
  • 使用 kitex -module example -service example echo.thrift 命令生成代码

Kitex服务注册与发现

  • 目前 Kitex 的服务注册与发现已经对接了主流了服务注册与发现中心,如 ETCD,Nacos 等。

image.png

三、Hertz

  • Hertz 分为两个上下文
  • Hertz 提供了 GET、POST、PUT、DELETE、ANY 等方法用于注册路由。
  • Hertz 提供了路由组( Group)的能力,用于支持路由分组的功能
  • Hertz 提供了参数路由和通配路由,路由的优先级为: 静态路由 >命名路由 > 通配路由

Bind大量使用反射

  • Hertz 提供了 Bind、Validate、BindAndValidate 函数用于进行参数绑定和校验

全局中间件的区别和路由中间件的区别

  • Hert 提供了代码生成工具 Hz,通过定义 DL(inteface description language ) 文件即可生成对应的基础服务代码.

image.png

四、实战案例

项目地址

kitex-examples/bizdemo/easy_note at main · cloudwego/kitex-examples · GitHub

image.png

image.png

五、总结

  • 了解了Go相关的Web、RPC、ORM框架
  • 熟悉了基础用法
  • 了解了框架的串联使用