Hertz 基本使用用法|青训营笔记

86 阅读2分钟

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/appgithub.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 服务器。

常用功能

  1. 请求参数处理: 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,
        })
    })
    
  2. 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)
    })
    
  3. 中间件: 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 框架,具有以下主要特性:

  1. 高性能:基于高效的事件驱动模型,适合开发高并发、高性能的 Web 应用。
  2. 简洁的 API:提供与其他主流框架类似的 API,便于开发者快速上手。
  3. 灵活的配置:支持各种自定义配置,适应多样化的开发需求。