HandleFunc Invoked Twice
単純な Go Web サーバーの例では、ポート 8000 にアクセスするときに HandleFunc が 2 回呼び出されるという不可解な問題が発生します。ウェブブラウザ。これは、単一の呼び出しのみをトリガーする、curl 使用時の予期される動作とは異なります。
問題の解明
問題をトラブルシューティングするためにログ ステートメントを実装すると、次のようになります。 /favicon.ico に対して追加のリクエストがブラウザによって行われたことが明らかです。このアイコンは通常、ブラウザのアドレス バーに表示されます。
解決策
リクエスト処理におけるこの不一致を解決するには、単に /favicon.ico のリクエストを承認します。 HandleFunc。この特定のリクエストにアクションが必要ない場合は、デフォルトの空のレスポンスで十分です。
変更されたコードは次のとおりです:
package main import ( "io" "log" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world!") log.Println("hello.") } func favicon(w http.ResponseWriter, r *http.Request) { http.NotFound(w, r) } func main() { mux := http.NewServeMux() mux.HandleFunc("/", hello) mux.HandleFunc("/favicon.ico", favicon) http.ListenAndServe(":8000", mux) }
以上がWeb ブラウザ経由でアクセスすると Go HandleFunc が 2 回呼び出されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。