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