Gin-Gonic промежуточное программное обеспечение - PullRequest
0 голосов
/ 29 мая 2018

Я использую 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)

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Да, вы можете.

Иногда промежуточное программное обеспечение принимает аргументы.Например:

MyMiddleware(foo string) gin.HandlerFunc {

    // preprocess with argument foo

    return func(c *gin.Context) {
        // do something related with foo...
    }
}

Взять, к примеру, gin.BasicAuthForRealm .Прежде чем проверять авторизацию по HTTP-запросам, вы должны предоставить ей данные аутентификации.

func BasicAuthForRealm(accounts Accounts, realm string) HandlerFunc {
    // ...
}

Для промежуточного программного обеспечения без аргументов, я думаю, что они просто хотят сохранить их в том же формате.

0 голосов
/ 29 мая 2018

Конечно, вы можете просто сделать это, если предпочитаете:

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))
...