这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
Hertz 是什么
Hertz [həːts] is a high-usability, high-performance and high-extensibility Golang HTTP framework that helps developers build microservices. It was designed with reference to other open-source frameworks like fasthttp, gin, echo and combined with the internal requirements in ByteDance.
简单来说就是字节跳动为了解决自己的业务问题,在参考了 gin 等框架后自己设计并开源的一个框架。
基本使用
这里使用 Hertz 实现,服务监听 8080 端口并注册了一个 GET 方法的路由函数
创建 Server 说明
- server.Default 默认继承 recover 中间件
- server.New 默认不继承 recover 中间件
路由函数说明
- h.GET 有两个上下文,一个专注于 “内容”,一个专注于 “请求的处理”
Hertz 路由
注册路由
与其他框架类似,Hertz 提供了 GET, POST, PUT, DELETE, ANY 等方法用于注册路由
也可以使用:HANDLE 方法以使用自定义路由
路由组
动态路由
Hertz 提供了参数路由和通配路由
当一个请求同时命中多个路由时,存在路由优先级:
静态路由 > 命名路由 > 通配路由
参数绑定
Hertz 提供了 Bind, Validate, BindAndValidate 函数用于进行参数绑定和校验
中间件
-
分为客户端中间件和服务端中间件
-
当存在通用的逻辑时,比如打印日志、计算接口耗时、源信息的设置和传递,会使用中间件
-
这里是 一个服务端中间件:
-
终止中间件调用链的执行:
- c.Abort
- c.AbortWithMsg
- c.AbortWithStats
HTTP Client
Hertz 提供 HTTP Client 用于帮助用户发送 HTTP 请求
这是一个 Client 的 GET 和 POST 请求示例:
Hz 代码生成工具
基本使用
-
通过定义 IDL 文件即可生成对应的基础服务端代码,新版支持生成 Client 代码(客户端代码)
目录结构
handler 包下对应的是服务
model 包下对应的是结构体
router 包下提供一些方便注册中间件和路由的代码逻辑
性能
-
网络库:Netpoll
- 在小包场景优于标准库
-
Json 编解码:Sonic
-
使用 sync.Pool 复用对象协议层数据解析优化