Go では、http.Request 型は HTTP リクエストに関するさまざまな情報を含む大きな構造体です。 HTTP リクエストを効率的に処理するために、Go はポインターを使用して、大規模なデータ構造をコピーするオーバーヘッドを回避します。
<code class="go">package main import ( "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello world")) }) http.ListenAndServe(":8000", nil) }</code>
*http.Request のアスタリスク (*) を削除すると、関数が関数であるためエラーが発生します。リテラルは、http.Request 型へのポインタを期待します。
<code class="go"> <p>github.com/creating_web_app_go/main.go:8: cannot use func literal (type func(http.ResponseWriter, http.Request)) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc</p></code>
ポインタは、オブジェクト自体のコピーではなく、オブジェクトへの参照を渡すために Go で使用されます。これは、特に http.Request のような大規模な構造の場合、より効率的です。さらに、http.Request には、HTTP ヘッダーやリクエスト本文などの状態情報が含まれており、コピーすると混乱を招く可能性があります。
したがって、http.Request 引数は、HTTP リクエストを効率的に処理するためのポインタである必要があります。そして、そこに含まれる状態情報の整合性を維持します。
以上がGo ではなぜ `http.Request` 引数がポインタである必要があるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。