Interceptor ist ein Entwurfsmuster, das das Einfügen benutzerdefinierten Verhaltens vor und nach der Methodenausführung ermöglicht. In Go kann es über Net/http-Middleware implementiert werden. Es bietet die Vorteile von Skalierbarkeit, Wiederverwendbarkeit, Testbarkeit usw. und kann in Szenarien wie Authentifizierung, Autorisierung, Caching, Protokollierung und benutzerdefinierter Fehlerbehandlung verwendet werden.
Einführung
Interceptor ist ein Entwurfsmuster, mit dem benutzerdefiniertes Verhalten vor oder nach der Ausführung einer Methode eingefügt werden kann. In Go können Interceptoren durch das Schreiben von net/http
-Middleware implementiert werden. net/http
中间件实现。
具体实现
以下是一个使用 net/http
编写拦截器的示例:
package main import ( "fmt" "log" "net/http" ) func main() { // 创建一个新的中间件函数 logMiddleware := func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { log.Println("Request received:", r.URL.Path) // 调用下一个处理程序 next.ServeHTTP(w, r) }) } // 创建一个新的 HTTP 处理程序 mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hello, World!") }) // 将中间件应用到处理程序 http.Handle("/", logMiddleware(mux)) // 启动 HTTP 服务器 log.Println("Listening on port 8080") http.ListenAndServe(":8080", nil) }
原理
该拦截器使用 net/http.HandlerFunc
创建一个新的 HTTP 处理程序。此处理程序在请求到达原始处理程序之前和之后执行。在我们的示例中,logMiddleware
Spezifische Implementierung
Das Folgende ist ein Beispiel für die Verwendung vonnet/http
zum Schreiben eines Interceptors: rrreee
net/http.HandlerFunc Erstellen Sie einen neuen HTTP-Handler. Dieser Handler wird ausgeführt, bevor und nachdem die Anforderung den ursprünglichen Handler erreicht. In unserem Beispiel protokolliert <code>logMiddleware
die empfangene Anfrage, bevor der Handler die Anfrage empfängt und den nächsten Handler aufruft.
Authentifizierung und Autorisierung
Das obige ist der detaillierte Inhalt vonEntmystifizierung des Abfangmechanismus in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!