这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
go-chi是一个轻量级、灵活和高性能的HTTP框架,它提供了丰富的中间件支持,可以帮助我们快速地实现各种HTTP处理逻辑,使用中间件框架时,我们需要根据自己的需求选择合适的中间件,并编写自定义的中间件来实现特定的功能。同时,我们需要注意中间件的顺序,保证它们按照正确的顺序被执行。。
- logger:记录HTTP请求和响应的日志。
- recoverer:处理HTTP处理函数中的panic异常,避免HTTP服务器崩溃。
- requestID:为每个HTTP请求生成唯一的请求ID,方便日志记录和调试。
- timeout:设置HTTP请求的超时时间,避免长时间的等待和阻塞。
- auth:实现HTTP请求的身份验证,保护受保护的资源。
使用go-chi的logger、recoverer、requestID、timeout和auth中间件,实现了HTTP请求的日志记录、panic异常处理、请求ID生成、超时时间设置和身份验证等功能。编写一个自定义的authMiddleware中间件,用于实现HTTP请求的身份验证。 实例:
package main
import (
"fmt"
"net/http"
"time"
"github.com/go-chi/chi"
"github.com/go-chi/chi/middleware"
)
func main() {
r := chi.NewRouter()
// 使用logger中间件记录HTTP请求和响应的日志
r.Use(middleware.Logger)
// 使用recoverer中间件处理HTTP处理函数中的panic异常
r.Use(middleware.Recoverer)
// 使用requestID中间件为每个HTTP请求生成唯一的请求ID
r.Use(middleware.RequestID)
// 使用timeout中间件设置HTTP请求的超时时间
r.Use(middleware.Timeout(5 * time.Second))
// 使用auth中间件实现HTTP请求的身份验证
r.Use(authMiddleware)
// 添加HTTP处理函数
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, world!")
})
// 启动HTTP服务器
http.ListenAndServe(":8080", r)
}
func authMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
token := r.Header.Get("Authorization")
if token == "" {
w.WriteHeader(http.StatusUnauthorized)
return
}
// TODO: Validate token
next.ServeHTTP(w, r)
})
}