Go 框架三件套详解(Hertz) | 青训营笔记

224 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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 性能

  1. 网路库 Netpoll
  2. Json 编解器 Sonic
  3. 使用 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…
丰富的实示例代码作业 demogithub.com/cloudwego/h…

三、课后个人总结:

Hertz 作为优秀的 HTTP 框架,具有 高易用性, 高性能, 高扩展性的特点

四、引用参考: