Overview: Go interceptor is a mechanism that handles the logic before and after functions implemented through intermediary software. Principle: The interceptor is passed to the function as a parameter, and the logic before and after the function is executed. Practical Combat: Demonstrates the use of interceptors by creating an interceptor that records request times and verifies request parameters, and links it to an HTTP handler.
Go Interceptor: At a Glance
Introduction
Interceptor is a A mechanism to do some processing before and after function execution. In Golang, interceptors can be implemented using middleware.
Principle
Interceptors work by passing themselves as parameters to the function to be intercepted. When a function is called, the interceptor will execute its logic before and after the function is executed.
Practical case
We create a simple HTTP server to demonstrate how to use interceptors:
package main import ( "log" "net/http" ) func main() { // 创建一个记录请求时间的拦截器 timeInterceptor := func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() defer func() { log.Printf("请求处理耗时:%fs", time.Since(start).Seconds()) }() next.ServeHTTP(w, r) }) } // 创建一个校验请求参数的拦截器 paramInterceptor := func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Query().Get("id") == "" { http.Error(w, "缺少参数:id", http.StatusBadRequest) return } next.ServeHTTP(w, r) }) } // 将拦截器与 HTTP 处理程序链接 handler := paramInterceptor(timeInterceptor(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello, World!")) }))) // 启动服务器 log.Fatal(http.ListenAndServe(":8080", handler)) }
In this example, timeInterceptor
The interceptor records the request processing time, while the paramInterceptor
interceptor verifies the request parameters. By chaining interceptors we can execute this logic before and after processing the request.
Summary
Interceptors are powerful tools to enhance the functionality of Golang programs. They allow you to execute custom code before and after a function executes, enabling operations such as logging, validation, and authorization.
The above is the detailed content of Golang interceptors: at a glance. For more information, please follow other related articles on the PHP Chinese website!