Go 框架三件套| 青训营笔记

119 阅读2分钟

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

这里三件套是指 GORM、Kitex、Hertz。

  1. GORM 是一个 ORM 框架,在字节内部被广泛使用
  2. Kitex 是字节内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的主要特点,支持多协议并且拥有丰富的开源扩展
  3. Hertz 是字节内部的 HTTP 框架,具有高易用性、高性能、高扩展性特点。

GORM

官网文档:gorm.cn/zh_CN/docs/

首先需要了解 Go 中结构体与 sql 表中的映射规则,然后是如何使用 dsn(data source name) 链接数据库,并执行增删查改等基本操作。

GORM 提供了 CURD 的 Hook 能力,在增删查改之前或之后自动调用的函数,如果任何 Hook 返回错误,那么 GORM 会停止后续的操作并回滚事务。

另外,还需要了解事务的基本处理流程和细节。

一些性能提高细节:

  1. GORM 为了提升写操作的数据完整性,会将它们封装到事务中运行。但这会降低性能,可以使用 SkipDefaultTransaction 关闭默认事务。
  2. 使用 PrepareStmt 缓存预编译语句可以提高后续调用的速度。

GORM 生态:

Kitex

官网文档:www.cloudwego.io/zh/docs/kit…

首先,我们应该学会使用 IDL(interface description language) 来定义服务与接口,它是用来制定协议的,是服务方和调用方之间的一种约定。

两个知识点:

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 项目。

  1. demoapi 为 API 服务,使用 HTTP。技术栈为 GORM/Kitex/Hertz
  2. demouser 为用户数据管理,使用 Protobuf。技术栈为 GORM/Kitex
  3. demonote 为笔记数据管理,使用 Thrift。技术栈为 GORM/Kitex