这是我参与「第五届青训营」伴学笔记创作活动的第 8 天
之前已经学习过Gorm相关的一些使用方法和知识,今天进一步学习go语言相关的框架,包括Web、RPC、ORM三个方面,分别对应Hertz、Kitex、Gorm三个框架
go框架三件套
GORM
上一次笔记已经介绍了gorm相关的一些用法,gorm是一个已经迭代了十几年,功能强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源拓展
1、基本使用
基本上分几步进行,定义gorm model,为model定义表名,连接数据库,创建数据,查询数据,更新数据,删除数据等
GORM目前支持Mysql、SQLServer、PostgreSQL、SQLite数据库,通过驱动连接数据库,如果需要连接其它类型的数据库,可以复用/自行开发驱动
GORM提供了gorm.DeletedAt用于帮助用户实现软删,拥有软删除能力的Model调用删除方法时并不会真正删除记录,GORM会将DeletedAt置为当前时间,并且不能再通过正常的查询方法找到该记录,使用Unscoped可以查询到被软删的数据
GORM目前支持Mysql、SQLServer、PostgreSQL、SQLite数据库,通过驱动连接数据库,如果需要连接其它类型的数据库,可以复用/自行开发驱动
GORM提供了gorm.DeletedAt用于帮助用户实现软删,拥有软删除能力的Model调用删除方法时并不会真正删除记录,GORM会将DeletedAt置为当前时间,并且不能再通过正常的查询方法找到该记录,使用Unscoped可以查询到被软删的数据
2、GORM事务
Gorm提供了Begin、Commit、Rollback方法用于使用事务,同时使用了Transaction方法用于自动提交事务,避免漏写Commit、Rollback
3、GORM Hook
GORM提供了CURD的Hook能力,在增删改查等操作之前和之后会自动调用Hook函数,如果任何Hook返回错误,GORM将停止后续的操作并回滚事务。对于写操作,为了保证数据的完整性,GORM会将它们封装在事务内运行,但这会降低性能,可以使用SkipDefaultTransaction关闭默认事务
4、GORM 生态
GORM有很多扩展,可以直接从github上导包,如代码生成工具,分片库方案、手动索引、乐观锁、读写分离、OpenTelemetry扩展
Kitex
Kitex目前对Windows的支持不完善,建议使用虚拟机或WSL21、定义IDL
如果进行RPC,就需要知道对方的接口是什么,需要传的参数,同时也需要知道返回值是什么样的,需要通过IDL约定双方的协议,与调用函数时的函数签名时一个道理
2、Kitex生态
Kitex拥有非常丰富的扩展生态,常用的有opentelemetry扩展,ETCD服务注册与发现扩展,Nacos服务注册与发现扩展,Zookeeper服务注册与发现扩展等
Hertz
1、Hertz路由
Hertz提供了GET、POST、PUT、DELETE、ANY等方法用于注册路由,同时提供了路由组的能力用于支持路由分组的功能,Hertz提供了参数路由和通配路由
2、Hertz生态
Hertz拥有非常丰富的扩展生态,如HTTP2扩展、opentelemetry扩展、JWT鉴权扩展、Websocket扩展、返向代理扩展等