1. ホーム
  2. pointers

[解決済み] Go HTTP ハンドラで、ResponseWriter が値で、Request がポインタであるのはなぜですか?

2023-01-12 01:38:18

質問

GAEのアプリを書いてGoを勉強しているのですが、ハンドラ関数のシグネチャがこれなんです。

func handle(w http.ResponseWriter, r *http.Request) {}

私はここでポインター初心者なのですが、どうして Request オブジェクトはポインタですが ResponseWriter はポインタではないのですか?このようにする必要性があるのでしょうか、それとも、ある種の高度なポインタベースのコードを可能にするためなのでしょうか?

どのように解決するのですか?

取得できるもの w は、エクスポートされない型へのポインタです。 http.response へのポインタですが ResponseWriter はインターフェースなので、それは見えません。

から server.go :

type ResponseWriter interface {
    ...
}

一方 r は具象構造体へのポインタであるため、明示的に参照を渡す必要があります。

から request.go :

type Request struct {
    ...
}