Hertz 入门 | 青训营笔记

199 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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 fasthttpginecho and combined with the internal requirements in ByteDance.

引自:github.com/cloudwego/h…

简单来说就是字节跳动为了解决自己的业务问题,在参考了 gin 等框架后自己设计并开源的一个框架。

基本使用

image.png

这里使用 Hertz 实现,服务监听 8080 端口并注册了一个 GET 方法的路由函数

创建 Server 说明

  • server.Default 默认继承 recover 中间件
  • server.New 默认不继承 recover 中间件

路由函数说明

  • h.GET 有两个上下文,一个专注于 “内容”,一个专注于 “请求的处理”

Hertz 路由

注册路由

与其他框架类似,Hertz 提供了 GET, POST, PUT, DELETE, ANY 等方法用于注册路由

image.png

也可以使用:HANDLE 方法以使用自定义路由

路由组

image.png

动态路由

Hertz 提供了参数路由和通配路由

image.png

当一个请求同时命中多个路由时,存在路由优先级:

    静态路由 > 命名路由 > 通配路由

参数绑定

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

image.png

中间件

  • 分为客户端中间件和服务端中间件

  • 当存在通用的逻辑时,比如打印日志、计算接口耗时、源信息的设置和传递,会使用中间件

  • 这里是 一个服务端中间件:

    image.png

  • 终止中间件调用链的执行:

    • c.Abort
    • c.AbortWithMsg
    • c.AbortWithStats

HTTP Client

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

这是一个 Client 的 GET 和 POST 请求示例:

image.png

Hz 代码生成工具

基本使用

  • 通过定义 IDL 文件即可生成对应的基础服务端代码,新版支持生成 Client 代码(客户端代码)

    image.png

目录结构

image.png

handler 包下对应的是服务

model 包下对应的是结构体

router 包下提供一些方便注册中间件和路由的代码逻辑

性能

  • 网络库:Netpoll

    • 在小包场景优于标准库
  • Json 编解码:Sonic

  • 使用 sync.Pool 复用对象协议层数据解析优化