中间件是 go 框架中的扩展机制,允许在请求管道中插入自定义逻辑,扩展应用程序功能。步骤:创建中间件:实现 handlerfunc 接口,编写 servehttp 方法。使用中间件:在路由中使用 r.use(mw.servehttp) 包含中间件。实战案例:创建日志记录中间件,记录请求时间和响应时间。
Go 框架的中间件扩展:扩展框架功能的指南
简介
中间件是一种在 Go 框架中扩展应用程序功能的机制。它允许您在请求处理管道中插入自定义逻辑,从而在应用程序的各个层级添加额外的功能。这篇文章将指导您如何创建和使用中间件扩展,并提供一个实战案例。
创建中间件
创建中间件需要实现 HandlerFunc 接口:
package main
import (
"net/http"
)
type myMiddleware struct {
next http.Handler
}
func (m myMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// 自定义逻辑
// ...
m.next.ServeHTTP(w, r)
}
myMiddleware 嵌入了 http.Handler,这意味着它可以像普通的 HTTP 处理程序一样工作。它实现了 ServeHTTP 方法,该方法在 HTTP 请求到达该中间件时会被调用。其中,您可以执行自定义逻辑,例如验证、身份验证或日志记录。
使用中间件
要使用中间件,您需要将其包含在路由中:
package main
import (
"<a style='color:#f60; text-decoration:underline;' href="https://www.php.cn/zt/15841.html" target="_blank">git</a>hub.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
mw := myMiddleware{}
r.Use(mw.ServeHTTP)
r.HandleFunc("/", homeHandler)
http.ListenAndServe(":8080", r)
}
在此示例中,http.ListenAndServe 之前添加了 mw.ServeHTTP,表示所有通过路由的请求都将调用 myMiddleware。
实战案例:日志记录中间件
让我们创建一个中间件来记录所有请求:
package main
import (
"log"
"net/http"
"time"
)
type loggingMiddleware struct {
next http.Handler
}
func (m loggingMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
start := time.Now()
m.next.ServeHTTP(w, r)
log.Printf("%s %s %s %v", r.Method, r.RequestURI, r.Proto, time.Since(start))
}
此中间件将在请求开始时记录时间戳,并在请求完成时计算并记录响应时间。
结论
通过创建和使用中间件,您可以轻松地扩展 Go 框架的功能。中间件允许您在不修改框架本身的情况下添加额外的功能,例如验证、身份验证或日志记录。这使您能够以模块化和可重用的方式增强您的应用程序。
golang免费学习笔记(深入):立即学习
在学习笔记中,你将探索 的核心概念和高级技巧!