package middleware import ( "bytes" "fmt" "github.com/gin-gonic/gin" ) // 原理是创建的时候注入了一个方法处理响应的信息 func ResponseFilterMiddleware(c *gin.Context) { fmt.Println(c.Writer) blw := &bodyLogWriter{ body: bytes.NewBufferString(""), ResponseWriter: c.Writer, } c.Writer = blw c.Next() statusCode := c.Writer.Status() fmt.Println(statusCode) fmt.Println("拦截输出") } type bodyLogWriter struct { gin.ResponseWriter body *bytes.Buffer } // 真正输出的时候,它会调用这个输出方法 func (w bodyLogWriter) Write(b []byte) (int, error) { // b = []byte(`{"code":0}`) w.body.Write(b) return w.ResponseWriter.Write(b) }