1。go1.22ハイライト:拡張モードマッチング能力
2。新しいmux
(1)基本的な使用例
経験豊富なGOプログラマーはすぐに2つの新機能に気付くことができます:
<code class="language-go">package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("GET /path/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "got path\n") }) mux.HandleFunc("/task/{id}/", func(w http.ResponseWriter, r *http.Request) { id := r.PathValue("id") fmt.Fprintf(w, "handling task with %s\n", id) }) http.ListenAndServe(":8090", mux) }</code>
最初の処理プログラムでは、HTTPメソッド(この例では取得)がパターンの一部として明示的に使用されます。これは、ここでの処理プログラムは、
/path/
には、以前のバージョンではサポートされていない形式が含まれています。このパスは、単一のパスコンポーネントと一致する可能性があり、処理プログラムは要求された{id}
PathValue
以下は、Curlコマンドを使用してこのサーバーをテストする例です。
投稿のリクエストを拒否し、GETリクエストのみを許可していることがわかります(curlデフォルトではget requestsを使用します)。同時に、リクエストが一致する場合、
ピッチに対応する値が与えられます。開発者は、新しいServemuxドキュメントを詳細に参照して、Tail PathやMix Matchingルール、<code class="language-bash">$ gotip run sample.go # 在另一个终端测试 $ curl localhost:8090/what/ 404 page not found $ curl localhost:8090/path/ got path $ curl -X POST localhost:8090/path/ Method Not Allowed $ curl localhost:8090/task/leapcell/ handling task with leapcell</code>
/path/
(2)モード競合治療id
{id}
この提案は、異なるモデル間の対立に特別な注意を払っています。以下は例です:{$}
<code class="language-go">package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("GET /path/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "got path\n") }) mux.HandleFunc("/task/{id}/", func(w http.ResponseWriter, r *http.Request) { id := r.PathValue("id") fmt.Fprintf(w, "handling task with %s\n", id) }) http.ListenAndServe(":8090", mux) }</code>
このエラーメッセージは詳細かつ実用的です。複雑な登録シナリオ(特にソースコードの複数のポジションで登録する場合)では、これらの詳細は、開発者が競合の問題を迅速に見つけて解決するのに役立ちます。
GOのRESTサーバーシリーズでは、さまざまな方法を使用して、タスクに単純なサーバーを実装します/GOで適用されます。最初の部分は標準ライブラリに基づいており、2番目の部分はGorilla/Muxルーターを使用して同じサーバーを再実装します。現在、GO 1.22 Enhanced MUXを使用してこのサーバーを再度実装することは非常に重要であり、Gorilla/MUXを使用したソリューションと比較することも興味深いことです。
以下は、代表モード登録コードの一部です:
<code class="language-bash">$ gotip run sample.go # 在另一个终端测试 $ curl localhost:8090/what/ 404 page not found $ curl localhost:8090/path/ got path $ curl -X POST localhost:8090/path/ Method Not Allowed $ curl localhost:8090/task/leapcell/ handling task with leapcell</code>
(2)プログラムの処理プロセス
ここで、プロセスは
<code class="language-go">mux := http.NewServeMux() mux.HandleFunc("/task/{id}/status/", func(w http.ResponseWriter, r *http.Request) { id := r.PathValue("id") fmt.Fprintf(w, "handling task status with %s\n", id) }) mux.HandleFunc("/task/0/{action}/", func(w http.ResponseWriter, r *http.Request) { action := r.PathValue("action") fmt.Fprintf(w, "handling task action with %s\n", action) })</code>
req.PathValue("id")
{id}
一般に、最終結果はGorilla/Muxを使用したソリューションに非常に似ています。従来の標準ライブラリ法と比較して、新しいMUXはより複雑なルーティング操作を実行し、ルーティング決定を処理プログラム自体に任せるニーズを減らし、開発効率とコードメンテナンスを改善することができます。 strconv.Atoi
4、結論
「どのルートを選択する必要がありますか?」 1.22がリリースされた後、この質問に対する答えが変わる可能性があります。多くの開発者は、新しい標準ライブラリMUXがニーズを満たすのに十分であるため、3番目のパーティパッケージに依存する必要があることに気付くでしょう。
もちろん、一部の開発者は、おなじみの第3パーティライブラリを選択し続けますが、これも合理的です。 Gorilla/Muxのようなルーターには、標準ライブラリよりも多くの機能があります。さらに、多くのGOプログラマーは、ルーターを提供するだけでなく、Webバックエンドを構築するために必要な入札ツールを提供するため、GINなどの軽量フレームワークを選択します。
最後に、GOサービスの展開に最も適したプラットフォームをお勧めします:Leapcell
以上がgo&#s http.servemuxだけが必要ですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。