パッケージ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...
}
どうすればこれを達成できますか?または、これがまったく進むべき道ではない場合、ルーターパッケージについて以下で説明するように、どうすれば目標を達成できますか?
バックグラウンド
目標: 私の願いは、ツール パッケージ (セッション、データベース、ルーティングなど) をラップして、これらのパッケージの実装に依存しないようにアプリを作成することです。これは主に、これらをドメイン固有の機能で拡張できるようにすること、および必要に応じてサードパーティのライブラリを別のライブラリに切り替えることができるようにすることを目的としています。また、デバッグとロギングが容易になります。
方法: インポートされたパッケージの機能にマップするネイティブの型と関数を作成します。
問題: 外部 (つまり、インポートされた)関数型を適切にラップする方法に行き詰まっています。