Как dgrouter обрабатывает промежуточное ПО? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть вопрос относительно промежуточного программного обеспечения в разных местах:

  1. Я читал об использовании промежуточного программного обеспечения только с stdlib для написания обработчиков запросов, как упоминалось здесь: (https://www.alexedwards.net/blog/making-and-using-middleware)
func middlewareOne(next http.Handler) http.Handler {
  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    // Our middleware logic goes here...
    next.ServeHTTP(w, r)
  })
}
mux := http.NewServeMux()
mux.Handle("/", middlewareOne(middlewareTwo(finalHandler)))

Мне кажется логичным, что передача одного обработчика внутри другого в этом формате выполняет ServeHTTP

следующего промежуточного программного обеспечения. Я использую dgrouter для маршрутизации команд Discord, и я обнаружил, что могу использовать там промежуточное ПО, а также определенное в этом примере: https://github.com/Necroforger/dgrouter/blob/master/examples/middleware/middleware.go#L40 -L59

метод, используемый для регистрации промежуточного программного обеспечения, определяется следующим образом:
https://github.com/Necroforger/dgrouter/blob/master/exrouter/router_wrapper.go#L41 -L49

Мой вопрос в том, почему промежуточное программное обеспечение не вызывается так, как это сделано в net/http, а просто передается имя функции:

router.Group(func(r *exrouter.Route) {
        // Added routes inherit their parent category.
        // I set the parent category here and it won't affect the
        // Actual router, just this group
        r.Cat("main")

        // This authentication middleware applies only to this group
        r.Use(Auth)
        log.Printf("len(middleware) = %d\n", len(r.Middleware))

        r.On("testauth", func(ctx *exrouter.Context) {
            ctx.Reply("Hello " + ctx.Get("member").(*discordgo.Member).Nick + ", you have permission to use this command")
        })
    })

r.Use (Auth)

Это то, что мне трудно понять. Почему не вызывается функция?

...