中间件是强大的 golang 工具,可构建更 robust 和容错的框架。它们允许集中处理错误,限制请求速率,并分离通用任务。具体来说:注册中间件:创建中间件处理器并将其注册到框架中。错误处理中间件:捕获恐慌并返回错误响应。限速中间件:限制请求速率以防止 ddos 攻击。
本文来自zvvq
使用中间件构建更 robust 和容错的 Golang 框架
中间件是 Golang 中强大且灵活的部分,它可以在请求到达处理程序之前和之后拦截和修改它们。通过将通用任务分离到中间件中,我们可以构建更 robust 和容错的框架。 内容来自zvvq,别采集哟
注册中间件
copyright zvvq
首先,让我们创建一个新的中间件处理器:
1
2
3
内容来自zvvq,别采集哟
4 内容来自samhan
5 zvvq.cn
6
内容来自samhan666
7 zvvq.cn
8
内容来自samhan
9
copyright zvvq
10
内容来自zvvq
11 zvvq好,好zvvq
12 copyright zvvq
13
14
15
package middleware
内容来自zvvq
import (
"fmt" zvvq
"net/http" 内容来自zvvq
) zvvq好,好zvvq
// ExampleMiddleware 是一个简单的中间件,它在请求前和后打印日志。 zvvq
func ExampleMiddleware(next http.Handler) http.Handler { zvvq
return http.HandlerFunc(func(w http.ResponseWriter, r http.Request) {
内容来自samhan
fmt.Println("Before request")
内容来自zvvq
next.ServeHTTP(w, r) 内容来自samhan
fmt.Println("After request")
内容来自samhan666
}) zvvq.cn
} 本文来自zvvq
然后,我们将它注册到我们的框架中: 内容来自samhan
1
zvvq
2
本文来自zvvq
mux := http.NewServeMux() 本文来自zvvq
mux.Use(middleware.ExampleMiddleware)
实战:错误处理 zvvq.cn
中间件的强大之处在于它允许我们在 framework 层面集中处理错误。考虑一个 recover 函数的中间件,该函数在发生恐慌时恢复并返回一个错误响应:
1
2 zvvq好,好zvvq
3
4
5 本文来自zvvq
6 zvvq
7 内容来自samhan
8
9
10
11 内容来自samhan666
12 内容来自zvvq
13 内容来自samhan
14
15
zvvq
16 内容来自samhan
17
18
19
20 zvvq好,好zvvq
21
内容来自samhan
package middleware 内容来自samhan666
import (
"log"
内容来自samhan
"net/http"
"runtime/debug"
)
// RecoveryMiddleware 捕获恐慌并返回错误响应。 zvvq
func RecoveryMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r http.Request) { zvvq.cn
defer func() {
copyright zvvq
if err := recover(); err != nil { 内容来自zvvq
log.Printf("panic: %+v", err) zvvq.cn
debug.PrintStack()
内容来自samhan
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) copyright zvvq
}
copyright zvvq
}() zvvq
next.ServeHTTP(w, r)
内容来自zvvq
})
copyright zvvq
}
实战:限速
zvvq.cn
另一个用例是限速中间件,它限制请求的速率。这对于防止分布式拒绝服务 (DDoS) 攻击非常有用:
1
内容来自zvvq,别采集哟
2 copyright zvvq
3
4
5 本文来自zvvq
6
7
内容来自zvvq,别采集哟
8
9
zvvq
10
11 zvvq.cn
12
13
copyright zvvq
14
本文来自zvvq
15 内容来自zvvq
16
17
本文来自zvvq
18
内容来自zvvq
19 内容来自zvvq,别采集哟
20
package middleware copyright zvvq
import ( zvvq好,好zvvq
"net/http"
内容来自zvvq,别采集哟
"time" 内容来自samhan
) 本文来自zvvq
// RateLimitMiddleware 限制请求速率。
func RateLimitMiddleware(next http.Handler) http.Handler { 本文来自zvvq
bucket := make(chan time.Time, 10) 内容来自zvvq
return http.HandlerFunc(func(w http.ResponseWriter, r http.Request) { zvvq
select {
zvvq.cn
case <-bucket: 内容来自zvvq,别采集哟
next.ServeHTTP(w, r)
default: zvvq
http.Error(w, http.StatusText(http.StatusTooManyRequests), http.StatusTooManyRequests) 内容来自samhan666
} 内容来自samhan666
bucket <- time.Now()
})
内容来自samhan666
}
内容来自zvvq
结论
zvvq
通过使用中间件,我们可以构建更 robust、容错且可扩展的 Golang 框架。它们使我们能够集中处理错误、限制请求速率等通用任务。在构建大型、可靠的 web 应用程序时,这是一个必不可少的工具。 内容来自zvvq
以上就是使用中间件构建更 robust 和容错的Golang框架的方法有哪些?的详细内容,更多请关注其它相关文章!
内容来自samhan