この単純な Web サーバーはなぜ偶数回印刷されるのですか?
この Go プログラミング演習では、単純な Web サーバーはカウントして表示するように設計されています。呼び出された回数。ただし、ページを更新すると、出力される値は偶数ずつしか増加しないように見えます (例: 1、3、5...)。
関数呼び出しの順序を理解する
すべての受信 HTTP リクエストは、指定されたハンドラー関数 (この場合は HelloWorld) への呼び出しをトリガーします。ただし、内部では、ブラウザーは /favicon.ico などの追加のリソース要求を行います。
サーバーは favicon 要求に適切に応答するようにプログラムされていないため、ブラウザーはページが更新されるたびに favicon 要求を要求し続けます。 。この追加のリクエストにより、コール カウンタが 1 つ増加します。
カウンタ ロジックの調整
ページの更新数を正しくカウントするには、サーバーはこれらの追加のリクエストを無視する必要があります。解決策の 1 つは、リクエスト パスがルート (「/」) である場合にのみカウンターをインクリメントすることです。
func HelloWorld(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { return } count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) }
あるいは、サーバーは特に favicon.ico に対するリクエストを除外することもできます。
func HelloWorld(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/favicon.ico" { return } count := atomic.AddInt64(&calls, 1) fmt.Fprintf(w, "You've called me %d times", count) }
以上がSimple Go Web サーバーに偶数番号の呼び出し数しか表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。