Golang echo пакет реализации промежуточного программного обеспечения
Я изучаю Go и изучал этот пример: пример промежуточного программного обеспечения. Я хотел сделать глубокое погружение, чтобы понять, что происходит, когда мы звоним next(c)
в функции промежуточного программного обеспечения Process()
,
Глядя на main()
Я понимаю, что мы добавляем Process()
функция эхо Context
список промежуточных функций объекта через Use()
вызов. Однако, глядя на исходный код эха, я не уверен, как next(c)
позвонить в Process()
Функция в примере промежуточного ПО просматривает все функции промежуточного ПО контекста. Пара вещей, которые я не могу найти даже после поиска исходного кода:
(1) Где находится определение функции для echo.HandlerFunc
определяется? Я вижу WrapHandler, но он экспортируется и не используется в echo.go
так что я запутался, что происходит, когда next(c)
вызывается какая строка кода в echo.go
исходный код мы переходим к.
(2) похоже, что цикл происходит при вызове applyMiddleware
поскольку это, кажется, проходит через все функции промежуточного программного обеспечения, сохраненные в списке функций промежуточного программного обеспечения Context, но я не вижу, как этот метод вызывается, пока вы не вызовете экспортированный WrapMiddleware
функция или ServeHTTP
и т.п.
1 ответ
next(c)
ничего не проходит next
переменная, полученная в качестве параметра функции, которая содержит функцию. next(c)
вызывает эту функцию. На практике это следующая часть цепочки, которая может быть следующим промежуточным программным обеспечением или конечным обработчиком запросов. Когда func
это Process
Возвращается называется, что само по себе можно было бы назвать next
промежуточным программным обеспечением до этого.
В этом нет никакой магии и ничего не скрыто внутри библиотеки. Это просто цепочка вызовов функций.