としての機能パッケージvalyala/fasthttpは、次の関数型を実装:Golang:引数、アクセス内部パラメータ(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...
}
どうしたらいいですか?あるいは、これがまったくいいことではない場合は、ルータパッケージについて下記のように私の目標をどのように達成することができますか?
背景
目標:私の願いは、これらのパッケージの実装に私のアプリはとらわれないようにするためにツーリングパッケージ(セッション、データベース、ルーティングなど)をラップすることです。私はこれを主にドメイン固有の機能で拡張し、サードパーティ製のlibを別のものに切り替えることができるようにするために、これをやりたいと思っています。また、デバッグとロギングも容易になります。
:インポートされたパッケージの機能に対応するネイティブの型と関数を作成します。
問題:私は正常に(すなわち輸入)の外国関数型をラップする方法について立ち往生しています。
私は、パッケージの実装を模倣するための引数として関数を渡しました。 net/httpでは、 'func Route(w http.ResponseWriter、r * http.Request){}'はbuaazp/fasthttprouterの 'func Route(ctx * fasthttp.RequestCtx){}'です。関数型を省略した場合、この実装の下でどのようにルートを宣言する必要がありますか? –
申し訳ありません私はあなたを理解していませんでした。したがって、サーバーとしてfasthttpを使用し、これを経路用のfasthttprouterと組み合わせたいとします。私は正しい? – apxp
はい、ただし、アプリケーションの残りの部分は見えません。私は_myapp/router_に他のパッケージが_myapp/router_のみをインポートするように、サードパーティーのインポートをすべて_myapp/router_にラップしたいと思います。私の問題は、インポートされたパッケージのシグネチャタイプで_handlerFunctions_としてフォーマットされているので、ルートを宣言することにあります。これは、私の前のコメントと同じように書式設定されていることを意味します。理想的には、私は 'router.GET(path string、ctx router.Context){}'または 'router.GET(path string、func(ctx router.Context){}'としてルートを宣言できるようにしたいと思います。これらをfasthttprouterの実装にマップします。 –