这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
这里三件套是指 GORM、Kitex、Hertz。
- GORM 是一个 ORM 框架,在字节内部被广泛使用
- Kitex 是字节内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的主要特点,支持多协议并且拥有丰富的开源扩展
- Hertz 是字节内部的 HTTP 框架,具有高易用性、高性能、高扩展性特点。
GORM
官网文档:gorm.cn/zh_CN/docs/
首先需要了解 Go 中结构体与 sql 表中的映射规则,然后是如何使用 dsn(data source name) 链接数据库,并执行增删查改等基本操作。
GORM 提供了 CURD 的 Hook 能力,在增删查改之前或之后自动调用的函数,如果任何 Hook 返回错误,那么 GORM 会停止后续的操作并回滚事务。
另外,还需要了解事务的基本处理流程和细节。
一些性能提高细节:
- GORM 为了提升写操作的数据完整性,会将它们封装到事务中运行。但这会降低性能,可以使用 SkipDefaultTransaction 关闭默认事务。
- 使用 PrepareStmt 缓存预编译语句可以提高后续调用的速度。
GORM 生态:
Kitex
官网文档:www.cloudwego.io/zh/docs/kit…
首先,我们应该学会使用 IDL(interface description language) 来定义服务与接口,它是用来制定协议的,是服务方和调用方之间的一种约定。
两个知识点:
- Thrift:thrift.apache.org/docs/idl
- Proto3: developers.google.com/protocol-bu…
Kitex 生态:
Hertz
官网文档:www.cloudwego.io/zh/docs/her…
需要学会使用 Hertz 注册服务和路由。
了解路由分组、参数路由、通配路由。路由优先级为:静态路由 > 命名路由 > 通配路由。
Hertz 提供了 Bind、Validate、BindAndValidate 函数用于进行参数绑定和校验。
Hertz 提供了代码生成工具 Hz,通过定义 IDL 文件即可生成对应的基础服务代码。
Hertz 生态
实战案例
github 地址:github.com/cloudwego/k…
笔记项目,使用 Hertz、Kitex、GORM 搭建出来的具有一定业务逻辑的后端 API 项目。
- demoapi 为 API 服务,使用 HTTP。技术栈为 GORM/Kitex/Hertz
- demouser 为用户数据管理,使用 Protobuf。技术栈为 GORM/Kitex
- demonote 为笔记数据管理,使用 Thrift。技术栈为 GORM/Kitex