go - Gin-Gonic 中间件声明

标签 go middleware go-gin

我正在使用 Gin-Gonic 并正在创建自定义中间件。请参阅:https://github.com/gin-gonic/gin#custom-middleware

文档中的中间件是不是有这样写的原因:

func MyMiddleware() gin.HandlerFunc {
    return func (c *gin.Context) {
        // middleware
    }
}
r := gin.New()
r.Use(MyMiddleware())

当我可以简单地这样写时:

func MyMiddleware(c *gin.Context) {
    // middleware
}
r := gin.New()
r.Use(MyMiddleware)

感谢您的帮助!

最佳答案

如果您愿意,当然可以这样做:

func MyMiddleware(c *gin.Context) {
    // middleware
}
r := gin.New()
r.Use(MyMiddleware)

建议您改为这样做的最可能原因:

func MyMiddleware() gin.HandlerFunc {
    return func (c *gin.Context) {
        // middleware
    }
}
r := gin.New()
r.Use(MyMiddleware())

是,所以可以加参数,这里用的例子:https://github.com/gin-gonic/gin#custom-middleware是一个日志记录中间件。:

func Logger() gin.HandlerFunc {
    return func(c *gin.Context) {
        // code goes here
    }
}

它没有任何参数,但您可以使用自定义记录器,如 logrus在你的中间件中添加一个参数:

你可以有一个像这样的日志记录中间件:

func Logger(log *logrus.Logger) gin.HandlerFunc {
    return func(c *gin.Context) {
        // use logrus
        log.WithFields(log.Fields{
          "animal": "walrus",
        }).Info("A walrus appears")

    }
}

然后像这样使用它:

var log = logrus.New()
r.Use(Logger(log))

关于go - Gin-Gonic 中间件声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50574796/

相关文章:

Node.js/Express.js - app.router 如何工作?

c# - 中间件是否需要在 ASP.net 和 C# 中重定向到 HTTPS?

json - golang json编码(marshal): how to omit empty nested struct

go - Golang-语法错误: unexpected { after top level declaration [closed]

go - 从GetWindowThreadProcessId调用返回的PID与TaskManager的PID不匹配

go - 处理上下文取消错误

python - 关键字 arg 之后的 Django SSLRedirect 非关键字 arg

go - Gin 上的 router.Static() 和 router.Use(static.Serve()) 有什么区别?

go - 如何使用 golang gin 为 restful API 创建身份验证模型?

go - json : cannot unmarshal string into Go struct field