字节跳动开源的云原生HTTP框架 — Hertz,下一代云原生的引领技术? 教你技术尝鲜。

Hertz是一个基于Golang的高性能微服务HTTP框架,结合了fasthttp、gin和echo的优势,适用于对性能有要求且需要高度定制化的微服务。本文介绍了Hertz的安装、项目初始化、参数获取、路由注册、中间件、错误处理和代码生成,展示了其在字节跳动内部的广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势, 并结合字节跳动内部的需求,使其具有高易用性、高性能、高扩展性等特点,目前在字节跳动内部已广泛使用。 如今越来越多的微服务选择使用 Golang,如果对微服务性能有要求,又希望框架能够充分满足内部的可定制化需求,Hertz 会是一个不错的选择。

安装Hertz命令行工具
请确保您的Go版本在1.15及以上版本,笔者用的版本是1.18 配置好GO的环境后,按照Hertz的命名行工具

go install github.com/cloudwego/hertz/cmd/hz@latest

验证Hertz工具是否安装成功,执行下面指令

hz -v

对应的输出hertz命令行工具版本

hz version v0.2.0

复制代码
新建一个Hertz项目
进入到$GOPATH下面,新建src文件夹,创建hertz_demo作为项目的根目录

cd $GOPATH
mkdir src
cd src
mkdir hertz_demo
cd hertz_demo

执行hz new初始化项目,项目初始化后,hertz会自动创建对应项目文件,文件结构如下

.
├── biz
│   ├── handler
│   │   └── ping.go
│   └── router
│       └── register.go
├── go.mod
├── main.go
├── router.go
└── router_gen.go

运行Hertz项目
执行go mod tidy整理项目
启动hertz 控制台输出如下:

2022[/07/24]() 23:08:10.114348 engine.go:524: [Debug] HERTZ: Method=GET absolutePath=[/ping]() --> handlerName=hertz_demo[/biz/handler.Ping]() (num=2 handlers)
2022[/07/24]() 23:08:10.115227 transport.go:91: [Info] HERTZ: HTTP server listening on address=[::]:8888

此时访问localhost:8888/ping服务器返回

{"message":"pong"}

Hertz获取请求参数
Query参数
通过c.Query获取路径参数

func Person(ctx context.Context, c *app.RequestContext) {
	name := c.Query("name")
	c.JSON(200, utils.H{
		"data": name,
	})
}
curl http://localhost:8888/person?name=erik

输出:

{"data":"erik"}

路径参数
通过c.Param获取路径参数

func HelloPerson(ctx context.Context, c *app.RequestContext) {
   name := c.Query("name")
   age := c.Param("age")
   c.JSON(200, utils.H{
      "age":  age,
      "name": name,
   })
}

路由注册

r.GET("/person/:age", hello.HelloPerson)

请求:

curl http://localhost:8888/hello/person/12?name=erik
{
  "age": "12",
  "name": "erik"
}

获取请求Body

func PersonInfo(ctx context.Context, c *app.RequestContext) {
   type Person struct {
      Age  int    `json:"age"`
      Name string `json:"name"`
   }
   body, err := c.Body()
   if err != nil {
      panic(err)
   }
   var p Person
   if err := json.Unmarshal(body, &p); err != nil {
      panic(err)
   }
   c.JSON(200, utils.H{
      "person": p,
   })
}

curl

curl --location --request POST 'lo
### Hertz HTTP Framework 使用指南与示例 Hertz 是由 ByteDance 开发并开源的一个高性能 Go 语言 Web 框架,旨在提供更高效的网络服务开发体验。以下是关于如何使用 Hertz 的详细介绍。 #### 安装 Hertz 为了开始使用 Hertz,首先需要安装该库: ```bash go get github.com/cloudwego/hertz ``` #### 创建简单的HTTP服务器 下面是一个创建简单 HTTP 服务器的例子: ```go package main import ( "context" "fmt" "time" "github.com/cloudwego/hertz/pkg/app" "github.com/cloudwego/hertz/pkg/app/server" ) func hello(c context.Context, ctx *app.RequestContext) { ctx.JSON(200, "hello world") } func main() { h := server.Default() h.GET("/hello", hello) h.Spin() } ``` 这段代码定义了一个处理函数 `hello` 和一个路由 `/hello`,当访问此路径时返回 JSON 响应 `"hello world"`[^3]。 #### 中间件支持 Hertz 支持中间件机制来增强请求处理流程的功能。这里展示怎样添加日志记录中间件到应用中: ```go h.Use(func(ctx context.Context, c *app.RequestContext) { startTime := time.Now() c.Next(ctx) endTime := time.Since(startTime) fmt.Printf("Request took %v\n", endTime) }) ``` 上述片段会在每次请求前后打印执行时间信息[^4]。 #### 错误处理 对于错误情况下的优雅响应,可以自定义全局级别的恢复中间件以捕获 panic 并发送合适的客户端消息: ```go h.Use(recovery.Recovery()) ``` 这行配置会自动为整个应用程序注册一个恢复处理器,在发生未预期异常时防止程序崩溃,并向调用方反馈适当的信息[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值