HTTP ハンドラーのポインター
Go では、HTTP ハンドラー関数の署名は通常次のようになります。
func handle(w http.ResponseWriter, r *http.Request) {}
このシグネチャは、ポインターを初めて使用する人に疑問を投げかけます。なぜ Request オブジェクトはポインターなのに対し、 ResponseWriter はそうではありませんか?
これを理解するには、両方のタイプの詳細を詳しく調べることが重要です。
ResponseWriter は HTTP 応答オブジェクトを表します。ただし、表面下では、実際には http.response と呼ばれるエクスポートされていない型へのポインターであり、HTTP 応答処理の内部をカプセル化します。 ResponseWriter はインターフェイスであるため、この基礎となる実装は公開されません。
対照的に、Request オブジェクトは具体的な構造 (Request) へのポインターであり、ヘッダーなど HTTP リクエストのさまざまな側面を表すフィールドが含まれています。 、本文、URL 情報。サーバーの応答を管理する ResponseWriter とは異なり、Request オブジェクトは主にクライアントの要求データにアクセスするために使用されます。これをポインターとして渡すと、必要に応じてハンドラーがリクエスト パラメーターを直接変更できるようになります。
以上が`*http.Request` はポインターであるのに、`http.ResponseWriter` が Go HTTP ハンドラーに含まれていないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。