包valyala/fasthttp实现了以下函数类型:
type RequestHandler func(ctx *RequestCtx)
它在buaazp/fasthttprouter中使用如下:
func (r *Router) Handle(method, path string, handle fasthttp.RequestHandler) {
//...
}
我正在尝试像这样包装这些(开放以获取有关实施的建议):
//myapp/router
type Request struct {
fasthttp.RequestCtx
}
type RequestHandler func(*Request)
func Handle(method string, path string, handler RequestHandler) {
//I need to access the fasthttp.RequestCtx stuff in here...
}
我怎样才能做到这一点?或者,如果这根本不是要走的路,我怎样才能达到下面提到的路由器包的目标?
背景
目标:我的愿望是包装工具包(会话、数据库、路由等),以使我的应用程序与这些包的实现无关。我希望这样做主要是为了能够使用特定于域的功能来扩展它们,并且能够将一个 3rd 方库切换到另一个库,如果我需要这样做的话。它还使调试和记录更容易。
方法:我创建本地类型和函数,它们映射到导入包的功能。
问题:我被困在如何正确包装外来(即导入)函数类型上。