Go框架三件(Web/RPC/ORM)| 青训营笔记

67 阅读3分钟

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

三件套基础使用

三件套

Gorm 强大的ORM框架

Kitex Golang 微服务RPC框架

Hertz 字节内部的HTTP框架

Grom

Gorm文档 gorm.cn/

Gorm创建数据

Gorm查询数据

Gorm更新数据

实际工程中引用软删,Gorm提供了gorm.DeletedAt用于帮助用户实现软删:拥有软删除能力的Model调用Delete时,记录不会被从数据库中真正删除。但Gormandize会将DeleteAt置为当前时间,并且你不能在通过正常的查询方式找到该记录。

使用Underscoped可以查询到被软删的数据。

Gorm事物

Gorm提供里Begin,Commit,Rollback方法用于使用事务。

Gorm提供里Transaction方法用于自动提交事务,避免用户漏写Commit,Rollback

Gorm Hook 在提供了CURD的Hook能力。Hook是在创建、查询、更新、删除等操作之前,之后自动调用的函数。

如果任何Hook返回错误,Gorm将停止后续的操作并回滚事务。

Gorm性能提高

对于写操作(创建、更新、删除),为了确保数据的完整性,Gorm会将它们封装在事务内运行。但这会降低性能,你可以使用SkipDefaultTransaction关闭默认事务。

使用PrepareStmt缓存预编译语句可以提高后续调用的速度。

Gorm生态

Gorm拥有非常丰富的扩展生态。

Kitex

使用IDL定义服务和接口

如果需要进行RPC,就需要知道对方的接口是什么,需要传什么参数,同时也需要直到返回值是什么样的。就需要通过IDL来约定双方的协议。

基本使用

服务默认监听8888端口。

创建Client

发起请求

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

Kitex服务注册与发现

Kitex生态

Hertz

基本使用

Hertz提供了GET,POST,PUT,DELETE ANY等方法注册路由。

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

Hertz提供了参数路由和通配路由,路由的优先级为:静态路由-》命名路由-》通配路由

Hertz提供了Bind,Validate,BindAndValidate函数用于进行参数绑定。

Hertz的中间件主要分为客户端中间件与服务端中间件。

Hertz提供了HTTP Client用于帮助用户发送HTTP请求。

Hertz代码生成工具

Hertz提供里代码生成工具HZ,通过定义IDL(inteface description language)文件即可生成树对应的基础服务代码。

Hertz性能

网络库Netpoll,Json编解码Sonic,使用sync.Pool复用对象协议层数据解析优化。

Hertz生态

Hertz拥有丰富的拓展生态。

实战案例介绍

通过使用Hertz,Kitex,Gorm搭建出具有有定业务逻辑的后端API项目。

总结

这次课程学习了Go开发框架三件套,由字节跳动内部开发经验总结得来,通过三件套可以更轻松应对开发中的代码需求。这些框架在项目中都是需要应用的,Gorm, Kitex, Hertz分别是ORM, RPC, HTTP框架,能够更好完善项目需求。