ZBLOG

golang meddleware handler机制

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

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

  1. type Handler interface {
  2. ServeHTTP(ResponseWriter, *Request)
  3. }

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

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

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. )
  6. // Middleware1 记录日志
  7. func Middleware1(next http.Handler) http.Handler {
  8. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  9. fmt.Println("log request:", r.URL.Path)
  10. next.ServeHTTP(w, r)
  11. })
  12. }
  13. // Middleware2 验证权限
  14. func Middleware2(next http.Handler) http.Handler {
  15. return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  16. // TODO: 验证用户权限
  17. next.ServeHTTP(w, r)
  18. })
  19. }
  20. // HelloHandler 处理请求
  21. func HelloHandler(w http.ResponseWriter, r *http.Request) {
  22. fmt.Fprintln(w, "Hello World!")
  23. }
  24. func main() {
  25. // 创建路由器并注册路由规则和对应的 Handler 函数
  26. router := http.NewServeMux()
  27. router.HandleFunc("/", HelloHandler)
  28. // 使用中间件包装 Handler
  29. handler := Middleware2(Middleware1(router))
  30. // 启动 HTTP 服务并监听端口
  31. http.ListenAndServe(":8080", handler)
  32. }

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?