Go 言語で同時ネットワークリクエストのリクエストルーティングとリクエストフィルタリングの問題を解決するにはどうすればよいですか?
Go 言語では、ゴルーチンとチャネルを使用して同時ネットワーク リクエストを簡単に実装できます。ただし、実際のアプリケーションでは、リクエストのルーティングとリクエストのフィルタリングで問題が発生することがよくあります。つまり、異なるリクエストは異なる処理関数を呼び出す必要があり、リクエストの特定のフィルタリングが必要です。
Go 言語には、Gorilla/Mux、gin、go-chi など、リクエストのルーティングやリクエストのフィルタリング機能を実行するのに役立つサードパーティ ライブラリが多数あります。以下では、Gorilla/Mux を例として、Go 言語でこれら 2 つの問題を解決する方法を紹介します。
まず、gorilla/mux ライブラリを使用してルーター (Router) を作成し、さまざまなルーティング ルールを定義する必要があります。たとえば、ルーティング ルールを /users/{id}
として定義して、/users/
で始まるリクエストを処理できます。ここで、{id}
は変数です。
router := mux.NewRouter() router.HandleFunc("/users/{id}", handleUserRequest)
上記のコードはルーターを作成し、ルーティング ルールを /users/{id}
として定義します。ルーティング ルールは、要求された URL の id## を自動的に変更します。 #パラメータは、処理のために
handleUserRequest 関数に渡されます。
handleUserRequest を定義する必要があります。この関数では、リクエストのパラメータを取得し、リクエストを処理し、結果を返すことができます。
func handleUserRequest(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id := vars["id"] // 根据id查询用户信息 user := getUserInfo(id) // 返回结果 if user != nil { json.NewEncoder(w).Encode(user) } else { http.NotFound(w, r) } }上記のコードでは、
mux.Vars(r) 関数を使用して、要求された URL の id パラメーターを取得します。次に、ID に基づいてユーザー情報をクエリし、結果をクライアントに返すことができます。
func authMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 进行权限验证 if !checkAuth(w, r) { return } // 调用下一个中间件或处理函数 next.ServeHTTP(w, r) }) }上記のコードは、権限検証用の
authMiddleware という名前のミドルウェア関数を定義しています。ミドルウェア機能では、トークンが有効かどうかの検証など、ビジネスロジックの判断を行うことができます。検証が失敗した場合は直接戻ることができ、失敗した場合は次のミドルウェアまたは処理関数を呼び出すことができます。
Useメソッドを使用してルーターに登録します。
router := mux.NewRouter() router.Use(authMiddleware)上記のコードでは、
Use メソッドを使用して
authMiddleware ミドルウェア関数をルーターに登録し、すべてのリクエストが最初にミドルウェア関数を通過するようにします。権限が検証され、対応するルーティング ルールに渡されて処理されます。
以上がGo 言語での同時ネットワークリクエストのリクエストルーティングとリクエストフィルタリングの問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。