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 промежуточным программным обеспечением до этого.

В этом нет никакой магии и ничего не скрыто внутри библиотеки. Это просто цепочка вызовов функций.

Другие вопросы по тегам