zvvq技术分享网

golang框架中如何进行中间件开发?(golang 数据库

作者:zvvq博客网
导读使用 go 框架构建中间件涉及以下步骤:实现 http.handler 接口,定义一个处理请求的 servehttp 方法。使用 r.use 将中间件添加到路由。添加终端处理程序来处理请求。常见的中间件用例包括

使用 go 框架构建中间件涉及以下步骤:实现 http.handler 接口,定义一个处理请求的 servehttp 方法。使用 r.use 将中间件添加到路由。添加终端处理程序来处理请求。常见的中间件用例包括:验证中间件:验证用户的凭据或权限,例如使用 jwt 身份验证。日志记录中间件:记录请求信息,例如端点、方法和响应时间。 zvvq好,好zvvq

内容来自zvvq,别采集哟

Go 框架中的中间件开发 copyright zvvq

简介 本文来自zvvq

中间件是一种允许在请求到达最终处理程序之前或之后执行自定义逻辑的机制。它们经常用于验证、日志记录和跨应用程序共享通用功能。Go 框架提供了对中间件的内置支持,使开发人员可以轻松地将其集成到他们的应用程序中。 内容来自samhan666

”;

copyright zvvq

如何创建中间件 copyright zvvq

在 Go 中创建一个中间件 involves 实现 http.Handler 接口。此接口定义了一个 ServeHTTP 方法,该方法接收一个 http.ResponseWriter 和一个 http.Request: copyright zvvq

1

内容来自zvvq

type Middleware func(http.ResponseWriter, http.Request, http.Handler) 内容来自samhan

使用中间件

内容来自samhan

一旦创建了中间件,就可以使用它来拦截请求: 内容来自zvvq

1 本文来自zvvq

2

zvvq好,好zvvq

3 内容来自zvvq,别采集哟

4

zvvq

5

本文来自zvvq

6 zvvq好,好zvvq

7 内容来自zvvq

8

copyright zvvq

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

// 将中间件添加到路由

本文来自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

实战案例

内容来自samhan

验证中间件

内容来自zvvq

验证中间件用于验证请求是否具有所需的凭据或许可权。以下示例使用 JWT (JSON Web 令牌) 进行用户身份验证:

内容来自samhan666

1 zvvq.cn

2

内容来自samhan666

3

内容来自samhan666

4

内容来自samhan666

5

copyright zvvq

6

内容来自samhan666

7

内容来自samhan666

8

zvvq好,好zvvq

9

zvvq好,好zvvq

10

内容来自zvvq,别采集哟

11 内容来自zvvq,别采集哟

12 zvvq

13

内容来自zvvq

14

内容来自samhan666

15

内容来自samhan666

16 内容来自zvvq

17 copyright zvvq

18

zvvq好,好zvvq

19 本文来自zvvq

20

zvvq

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) {

zvvq

token := r.Header.Get("Authorization")

zvvq好,好zvvq

claims, err := ValidateToken(token) 内容来自samhan666

if err != nil { copyright zvvq

http.Error(w, "Invalid token", http.StatusUnauthorized)

zvvq.cn

return 内容来自samhan666

} zvvq

// 将已验证的 claims 存储在请求上下文中

内容来自zvvq,别采集哟

ctx := context.WithValue(r.Context(), "user", claims) 内容来自samhan666

// 将经过验证的请求传递到下一个处理程序

内容来自zvvq

next.ServeHTTP(w, r.WithContext(ctx)) copyright zvvq

})

内容来自samhan666

}

内容来自zvvq,别采集哟

日志记录中间件 内容来自zvvq,别采集哟

日志记录中间件用于记录请求的详细信息,例如端点、方法和响应时间。以下示例使用 Zap 来记录请求信息: copyright zvvq

1 内容来自samhan666

2

本文来自zvvq

3

内容来自samhan666

4 zvvq

5 zvvq好,好zvvq

6 zvvq

7 zvvq好,好zvvq

8

zvvq

9 zvvq.cn

10

内容来自zvvq,别采集哟

11

内容来自zvvq

12

zvvq.cn

13 内容来自samhan

14

本文来自zvvq

15

内容来自samhan

16

copyright zvvq

17

zvvq

import (

内容来自zvvq

"net/http"

本文来自zvvq

"go.uber.org/zap"

内容来自samhan666

) 内容来自zvvq

func LoggingMiddleware(next http.Handler) http.Handler {

内容来自samhan

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))

zvvq好,好zvvq

// 将请求传递到下一个处理程序

zvvq.cn

next.ServeHTTP(w, r) 内容来自samhan666

// 记录响应 zvvq.cn

logger.Info("Sent response", zap.Int("status", w.StatusCode))

内容来自samhan

}) zvvq好,好zvvq

} zvvq.cn

以上就是golang框架中如何进行中间件开发?的详细内容,更多请关注其它相关文章! 本文来自zvvq