ZBLOG

golang meddleware handler机制

在 Golang 中,Middleware 和 Handler 是两个概念。

Handler 用于处理请求,可以看作是业务逻辑的实现。在 http 包中,Handler 接口如下:

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
}

Middleware 则是对请求进行一些预处理或者后置处理的过程。它本身也实现了 Handler 接口,因此 Middleware 可以通过组合多个 Middleware 来形成一个完整的请求处理链。常见的 Middleware 操作包括记录日志、验证权限、解析 body 等。

下面我们来看一个例子,说明如何使用 Middleware 和 Handler 组成一个完整的 HTTP 处理流程:

package main

import (
    "fmt"
    "net/http"
)

// Middleware1 记录日志
func Middleware1(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fmt.Println("log request:", r.URL.Path)
        next.ServeHTTP(w, r)
    })
}

// Middleware2 验证权限
func Middleware2(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // TODO: 验证用户权限
        next.ServeHTTP(w, r)
    })
}

// HelloHandler 处理请求
func HelloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello World!")
}

func main() {
    // 创建路由器并注册路由规则和对应的 Handler 函数
    router := http.NewServeMux()
    router.HandleFunc("/", HelloHandler)

    // 使用中间件包装 Handler
    handler := Middleware2(Middleware1(router))

    // 启动 HTTP 服务并监听端口
    http.ListenAndServe(":8080", handler)
}

在上面的例子中,我们使用了两个 Middleware(Middleware1 和 Middleware2),它们分别用于记录日志和验证用户权限。然后将路由器包装成一个完整的 Handler(handler 变量),最后通过 ListenAndServe 方法启动 HTTP 服务。

当客户端向服务器发送请求时,请求会先经过 Middleware1 处理,然后再经过 Middleware2 处理,最终交给 HelloHandler 函数处理,并将结果返回给客户端。这样就形成了一个完整的请求处理链。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6978

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?