Golang-Middleware
中间件:Middleware
使用中间件剥离非业务逻辑
func hello(wr http.ResponseWriter, r *http.Request) {
wr.Write([]byte("hello"))
}
func timeMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(wr http.ResponseWriter, r *http.Request) {
timeStart := time.Now()
// next handler
next.ServeHTTP(wr, r)
timeElapsed := time.Since(timeStart)
logger.Println(timeElapsed)
})
}
func main() {
http.Handle("/", timeMiddleware(http.HandlerFunc(hello)))
err := http.ListenAndServe(":8080", nil)
...
}
gin
package main
import (
"fmt"
"time"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.New()
router.Use(gin.Recovery())
router.Use(gin.Logger())
// use customize middleware
router.Use(timeMiddleWares)
router.GET("/", index)
router.Run()
}
func index(c *gin.Context) {
c.JSON(
200,
gin.H{
"message": "ok",
},
)
}
// middleware
func timeMiddleWares(c *gin.Context) {
timeStart := time.Now()
// next handler
c.Next()
timeElapsed := time.Since(timeStart)
fmt.Println(timeElapsed)
}