Hertz 是一个轻量级、高性能的 Golang Web 框架,类似于 Gin、Echo 等框架。它具有良好的扩展性和易用性,适合开发高效的 Web 服务。以下是 Hertz 的基本使用示例,介绍如何进行快速开发。
安装 Hertz
首先,确保你已安装了 Go 开发环境,然后可以通过以下命令安装 Hertz 框架:
go get github.com/cloudwego/hertz
基本示例
以下是一个简单的 HTTP 服务器示例:
package main
import (
"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/app/server"
"github.com/cloudwego/hertz/pkg/protocol/consts"
)
func main() {
// 创建一个 Hertz 实例
h := server.Default()
// 配置一个 GET 请求的路由
h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
// 设置响应状态码为 200,并返回一个 JSON 响应
ctx.JSON(consts.StatusOK, map[string]string{
"message": "pong",
})
})
// 启动 HTTP 服务器
h.Spin()
}
代码详解
-
导入包:首先导入
github.com/cloudwego/hertz/pkg/app和github.com/cloudwego/hertz/pkg/app/server,用于创建 Hertz 服务器。 -
创建服务器实例:
server.Default()创建一个带有默认配置的 HTTP 服务器实例h。 -
设置路由和处理程序:
- 使用
h.GET()方法来为 GET 请求注册路由。在此示例中,URL 路径是/ping。 - 路由的处理函数使用了
context.Context和*app.RequestContext作为参数,ctx.JSON()方法用于响应客户端请求。
- 使用
-
启动服务器:调用
h.Spin()启动 HTTP 服务器。
常用功能
-
请求参数处理: Hertz 支持通过不同的方法处理查询参数、表单参数、路径参数等。例如,可以通过以下代码处理查询参数:
h.GET("/user", func(c context.Context, ctx *app.RequestContext) { // 获取查询参数 name := ctx.Query("name") age := ctx.DefaultQuery("age", "18") // 提供默认值 ctx.JSON(consts.StatusOK, map[string]string{ "name": name, "age": age, }) }) -
POST 请求与 JSON 请求体处理: Hertz 可以轻松处理 POST 请求以及解析 JSON 请求体:
h.POST("/user", func(c context.Context, ctx *app.RequestContext) { var json map[string]interface{} // 绑定 JSON 数据到结构体 if err := ctx.Bind(&json); err != nil { ctx.JSON(consts.StatusBadRequest, map[string]string{ "error": "Invalid request", }) return } ctx.JSON(consts.StatusOK, json) }) -
中间件: Hertz 也支持中间件,可以在请求处理之前或者响应之后执行一些通用的逻辑,例如请求日志记录和鉴权:
func LoggerMiddleware() app.HandlerFunc { return func(c context.Context, ctx *app.RequestContext) { // 打印请求的方法和路径 fmt.Printf("Request: %s %s\n", ctx.Method(), ctx.Request.URI().PathOriginal()) ctx.Next(c) // 调用下一个中间件或处理函数 } } func main() { h := server.Default() // 注册中间件 h.Use(LoggerMiddleware()) h.GET("/ping", func(c context.Context, ctx *app.RequestContext) { ctx.JSON(consts.StatusOK, map[string]string{ "message": "pong", }) }) h.Spin() }
配置
Hertz 提供多种配置选项来控制服务器的行为。例如,可以使用 server.WithOptions 方法来设置端口等参数:
import "github.com/cloudwego/hertz/pkg/network/netpoll"
func main() {
// 自定义端口配置
opts := []server.Option{
server.WithHostPorts(":8081"),
server.WithTransport(netpoll.NewTransport()), // 可选的网络传输层配置
}
h := server.New(opts...)
h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
ctx.JSON(consts.StatusOK, map[string]string{
"message": "pong",
})
})
h.Spin()
}
总结
Hertz 是一个轻量级且功能强大的 Go Web 框架,具有以下主要特性:
- 高性能:基于高效的事件驱动模型,适合开发高并发、高性能的 Web 应用。
- 简洁的 API:提供与其他主流框架类似的 API,便于开发者快速上手。
- 灵活的配置:支持各种自定义配置,适应多样化的开发需求。