Golang Interceptor (Interceptor) ist ein leistungsstarkes Entwurfsmuster, das viele Funktionen in praktischen Anwendungen implementieren kann, wie z. B. Protokollierung, Fehlerbehandlung, Berechtigungskontrolle usw. In diesem Artikel wird der tatsächliche Anwendungseffekt des Golang-Interceptors eingehend analysiert und seine Verwendung und Wirkung anhand spezifischer Codebeispiele demonstriert.
Golang-Interceptor ist ein aspektorientiertes Programmiermuster (AOP), indem Sie vor und nach Funktionsaufrufen eine Proxy-Ebene hinzufügen. Abfangjäger können vor, nach oder beim Auftreten eines Fehlers in Funktionen eingreifen, um eine flexiblere Steuerung und Bedienung zu erreichen.
2. Praktische Anwendungseffekte Das Folgende ist ein Beispiel für einen einfachen Protokollierungs-Interceptor:package interceptor import ( "log" "time" ) func Logger(next http.HandlerFunc) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() log.Printf("Start: %s %s", r.Method, r.URL.Path) next(w, r) elapsed := time.Since(start) log.Printf("End: %s %s took %s", r.Method, r.URL.Path, elapsed) }) }
package interceptor import ( "log" "net/http" ) func ErrorHandler(next http.HandlerFunc) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer func() { if err := recover(); err != nil { log.Printf("Panic: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } }() next(w, r) }) }
package interceptor import ( "net/http" ) func AuthMiddleware(next http.HandlerFunc) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if checkPermission(r) { next(w, r) } else { http.Error(w, "Permission Denied", http.StatusForbidden) } }) } func checkPermission(r *http.Request) bool { // 根据请求判断用户权限 return true }
package main import ( "net/http" "github.com/gorilla/mux" "github.com/yourusername/interceptor" // 导入拦截器包 func main() { r := mux.NewRouter() r.HandleFunc("/hello", interceptor.Logger(interceptor.ErrorHandler(handleHello))) r.HandleFunc("/admin", interceptor.Logger(interceptor.ErrorHandler(interceptor.AuthMiddleware(handleAdmin)))) http.Handle("/", r) http.ListenAndServe(":8080", nil) } func handleHello(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello, World!")) } func handleAdmin(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Admin Panel")) }
4. Zusammenfassung
Golang Interceptor ist ein leistungsstarkes Entwurfsmuster, das Protokollierung, Fehlerbehandlung, Berechtigungskontrolle und andere Funktionen implementieren kann, um die Wiederverwendbarkeit und Skalierbarkeit des Codes zu verbessern. In der tatsächlichen Entwicklung kann der rationelle Einsatz von Interceptoren die Codelogik vereinfachen und die Codequalität verbessern, was für Entwickler eine eingehende Untersuchung und Übung wert ist. interceptor.Logger
、interceptor.ErrorHandler
和interceptor.AuthMiddleware
三个拦截器,实现了对/hello
和/admin
Das obige ist der detaillierte Inhalt vonEingehende Analyse: der praktische Anwendungseffekt des Golang-Abfangjägers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!