这是我参与「第五届青训营 」笔记创作活动的第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自带默认事务防止数据不一致(影响了性能但是)读操作没有事务
二、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 等。
三、Hertz
- Hertz 分为两个上下文
- Hertz 提供了 GET、POST、PUT、DELETE、ANY 等方法用于注册路由。
- Hertz 提供了路由组( Group)的能力,用于支持路由分组的功能
- Hertz 提供了参数路由和通配路由,路由的优先级为: 静态路由 >命名路由 > 通配路由
Bind大量使用反射
- Hertz 提供了 Bind、Validate、BindAndValidate 函数用于进行参数绑定和校验
全局中间件的区别和路由中间件的区别
- Hert 提供了代码生成工具 Hz,通过定义 DL(inteface description language ) 文件即可生成对应的基础服务代码.
四、实战案例
项目地址
kitex-examples/bizdemo/easy_note at main · cloudwego/kitex-examples · GitHub
五、总结
- 了解了Go相关的Web、RPC、ORM框架
- 熟悉了基础用法
- 了解了框架的串联使用