这是我参与「第五届青训营」伴学笔记创作活动的第 3 天
1、三件套(Gorm、Kitex、Hertz)
Gorm:数据库相关框架
Kitex:微服务框架
Hertz:HTTP框架
2、三件套的使用
Gorm
Gorm的基本使用
grom model:本质上是数据库中的一张表
db.First只能查询一条记录
db.Model需要调用表名
Updates-更新多个字段(传入结构体的时候,注意只会更新非0值;若想要更新0值则可以传递一个map进去)
db.Delete
GORM支持的数据库
GORM可以复用驱动,也可以自行开发驱动
GORM创建数据
Create、Update、Updates、Find等动词都是finish API,当调用了finish API后SQL就会执行,之后再加Where这种条件的话都不会生效
GORM查询数据
First只能查一条数据。因此建议使用Find。因为Find查询多条数据的时候,在查询不到的时候不会报错
对于零值存在的情况,可以使用 map 或者是 select 字段实现
GORM更新数据
使用Update的时候需要配合Model和Where来设置表名,否则会报错
注意第五条:GORM实现SQL表达式更新(进阶用法)
GORM删除数据
物理删除:删了就是真删除了
软删除:实际开发应该使用软件删除,GORM中
GORM事务
GORM能支持防SQL注入
对数据一致性要求比较强,则需要使用事务
db.Bgein会固化链接(不会再使用链接池的链接),注意要使用 'tx' 而不是 'db'
实际开发可能忘了写Rollback或者Commit
GORM使用 Transaction 方法实现自动提交事务,避免用户漏写Rollback或者Commit
建议使用Transaction,避免漏写 Commit 或者 Rollback
GORM Hook
开启hook的时候GORM会开启默认事务,hook操作会在默认事务里面
创建前的hook可以用来做参数校验
创建后的hook用来返回错误
GORM性能提高
GORM生态
Kitex
安装Kitex代码生成工具
定义IDL
使用IDL进行接口修改
协同开发的时候使用IDL
Kitex生成代码
build.sh:生成可执行文件
kitex_gen:主要实现编解码的优化
main.go:程序入口
hanler.go:写service的逻辑
Kitex基础使用
简单的逻辑可以直接写到handler.go中
Kitex Client 发起请求
Kitex服务注册与发现
服务名做服务过滤
Kitex生态
Hertz
Hertz基本使用
server.Default默认集成recover的中间件;server.New默认没有recover的中间件。
hertz支持多种 hook
hertz分为两个上下文,一个传源信息,一个处理请求
Hertz路由
hertz提供handler可以实现自定义的method
hertz可以实现路由分组
hertz提供参数路由和通配路由,路由优先级:静态路由 > 命名路由 > 通配路由
Hertz参数绑定
bind传递指针,注意:不要传递指针的指针
Hertz中间件
打日志、计算耗时等一般会使用中间件
使用 h.Use注册中间件
Hertz Client
Hertz代码生成工具
定义好IDL后可以生成服务端代码,也可以生成客户端代码
Hertz性能
- 网络库Netpoll
- json优化 Sonic
- 使用sync.Pool复用对象协议层数据解析优化
Hertz生态
PS
本文主要作用是作为上课笔记,如有错误,欢迎大家评论指正,我会及时改正