使用 go 框架构建中间件涉及以下步骤:实现 http.handler 接口,定义一个处理请求的 servehttp 方法。使用 r.use 将中间件添加到路由。添加终端处理程序来处理请求。常见的中间件用例包括:验证中间件:验证用户的凭据或权限,例如使用 jwt 身份验证。日志记录中间件:记录请求信息,例如端点、方法和响应时间。 zvvq好,好zvvq
内容来自zvvq,别采集哟
Go 框架中的中间件开发 copyright zvvq
简介 本文来自zvvq
中间件是一种允许在请求到达最终处理程序之前或之后执行自定义逻辑的机制。它们经常用于验证、日志记录和跨应用程序共享通用功能。Go 框架提供了对中间件的内置支持,使开发人员可以轻松地将其集成到他们的应用程序中。 内容来自samhan666
如何创建中间件 copyright zvvq
在 Go 中创建一个中间件 involves 实现 http.Handler 接口。此接口定义了一个 ServeHTTP 方法,该方法接收一个 http.ResponseWriter 和一个 http.Request: copyright zvvq
1
type Middleware func(http.ResponseWriter, http.Request, http.Handler) 内容来自samhan
使用中间件
一旦创建了中间件,就可以使用它来拦截请求: 内容来自zvvq
1 本文来自zvvq
2
3 内容来自zvvq,别采集哟
4
5
6 zvvq好,好zvvq
7 内容来自zvvq
8
9
内容来自zvvq,别采集哟
10 本文来自zvvq
11 copyright zvvq
12 zvvq好,好zvvq
13 zvvq.cn
14 内容来自samhan666
15
内容来自samhan666
func main() { zvvq.cn
// 创建一个新的路由 内容来自zvvq
r := http.NewServeMux()
// 将中间件添加到路由
本文来自zvvq
r.Use(middleware1, middleware2)
zvvq
// 添加一个终端处理程序
内容来自samhan666
r.HandleFunc("/", func(w http.ResponseWriter, r http.Request) { copyright zvvq
fmt.Fprintf(w, "Hello, World!")
zvvq
})
内容来自zvvq,别采集哟
// 启动服务器
本文来自zvvq
http.ListenAndServe(":8080", r)
} 内容来自zvvq
实战案例
验证中间件
内容来自zvvq
验证中间件用于验证请求是否具有所需的凭据或许可权。以下示例使用 JWT (JSON Web 令牌) 进行用户身份验证:
1 zvvq.cn
2
3
4
5
copyright zvvq
6
内容来自samhan666
7
8
9
10
11 内容来自zvvq,别采集哟
12 zvvq
13
内容来自zvvq
14
内容来自samhan666
15
16 内容来自zvvq
17 copyright zvvq
18
zvvq好,好zvvq
19 本文来自zvvq
20
21 zvvq好,好zvvq
22 copyright zvvq
import ( 内容来自samhan666
"net/http" 本文来自zvvq
"<a style=color:f60; text-decoration:underline; href="https://www.zvvq.cn/zt/15841.html" target="_blank">git</a>hub.com/<a style=color:f60; text-decoration:underline; href="https://www.zvvq.cn/zt/16009.html" target="_blank">golang</a>-jwt/jwt"
内容来自zvvq,别采集哟
) zvvq
func JWTAuth(next http.Handler) http.Handler { zvvq
return http.HandlerFunc(func(w http.ResponseWriter, r http.Request) {
token := r.Header.Get("Authorization")
claims, err := ValidateToken(token) 内容来自samhan666
if err != nil { copyright zvvq
http.Error(w, "Invalid token", http.StatusUnauthorized)
return 内容来自samhan666
} zvvq
// 将已验证的 claims 存储在请求上下文中
内容来自zvvq,别采集哟
ctx := context.WithValue(r.Context(), "user", claims) 内容来自samhan666
// 将经过验证的请求传递到下一个处理程序
内容来自zvvq
next.ServeHTTP(w, r.WithContext(ctx)) copyright zvvq
})
}
内容来自zvvq,别采集哟
日志记录中间件 内容来自zvvq,别采集哟
日志记录中间件用于记录请求的详细信息,例如端点、方法和响应时间。以下示例使用 Zap 来记录请求信息: copyright zvvq
1 内容来自samhan666
2
3
内容来自samhan666
4 zvvq
5 zvvq好,好zvvq
6 zvvq
7 zvvq好,好zvvq
8
zvvq
9 zvvq.cn
10
11
内容来自zvvq
12
13 内容来自samhan
14
本文来自zvvq
15
内容来自samhan
16
17
import (
"net/http"
本文来自zvvq
"go.uber.org/zap"
内容来自samhan666
) 内容来自zvvq
func LoggingMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r http.Request) { zvvq
logger.Info("Received request", zap.String("method", r.Method), zap.String("endpoint", r.URL.Path))
// 将请求传递到下一个处理程序
next.ServeHTTP(w, r) 内容来自samhan666
// 记录响应 zvvq.cn
logger.Info("Sent response", zap.Int("status", w.StatusCode))
内容来自samhan
}) zvvq好,好zvvq
} zvvq.cn
以上就是golang框架中如何进行中间件开发?的详细内容,更多请关注其它相关文章! 本文来自zvvq