这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天,本文主要以概括总结,全局记录为主,而不是作为细致的知识点讲解,细节之处多有疏忽还望多多包容。
一、本堂课重点内容:
- Hertz 介绍
二、详细知识点介绍:
Hertz 基本使用
使用 Hertz 实现,服务监听 8080 端口并注册了一个 GET 方法的路由函数.
package main
import (
"context"
"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/app/server"
"github.com/cloudwego/hertz/pkg/common/utils"
"github.com/cloudwego/hertz/pkg/protocol/consts"
)
fun main(){
h:= server.Default(server.WithHostPorts(127.0.0.1:8080))
h.GET("/ping", func(c context.Context, ctx *app.RequestContext){
ctx.JSON(consts.StatusOK, utils.H{"ping":"pong"})
})
h.Spin()
}
Hertz 路由
Hertz 提供了 GET, POST, PUT , DELETE, ANY 等方法用于注册路由
Hertz 提供了路由组(Group)的能力, 用于支持路由分组的功能
Herz 提供了参数路由和通配路由, 路由的优先级为 : 静态路由 > 命名路由 > 通配路由
上面提到的静态路由,也就是说,路径都是固定的。但是有时候我们需要在路径中传入参数,例如获取某个用户的信息,我们不可能为每个用户创建一条路由,而是在通过捕获路径中的参数(例如用户id)来实现。
Hertz 参数绑定
Hertz 提供了 Bind, Validate , BindAndValidate 函数用于进行参数绑定和校验
Hertz 中间件
Hertz 的中间件主要分为 客户端中间件和服务端中间件,.
如何终止中间件调用链的执行?
c.Abort
c.AbortWithMsg
c.AbortWithStats
Hertz Client
Hertz 提供了 HTTP Client 用于帮助用户发送 Http 请求
Hertz 代码生成工具
Hertz 提供了代码生成工具 Hz, 通过定义 IDL(interface description language )
Hertz 性能
- 网路库 Netpoll
- Json 编解器 Sonic
- 使用 sync.Pool 复用对象协议层数据解析优化
Hertz 生态
hertz 拥有非常丰富的扩展生态, 下面我将列举一部分常用的扩展及给出一些地址
| Http2扩展 | github.com/hertz-contr… |
|---|---|
| opentelemetry 扩展 | github.com/hertz-contr… |
| 国际化扩展 | github.com/hertz-contr… |
| 反向代理扩展 | github.com/hertz-contr… |
| jwt 鉴权扩展 | github.com/hertz-contr… |
| websocket 扩展 | github.com/hertz-contr… |
| 丰富的实示例代码作业 demo | github.com/cloudwego/h… |
三、课后个人总结:
Hertz 作为优秀的 HTTP 框架,具有 高易用性, 高性能, 高扩展性的特点