http.ResponseWriterいくつかのs が実行された a が与えられた場合.Write()、応答の現在の累積長を直接取得できますか?
これは変換で実行できると確信してHijackいますが、直接実行できるかどうか知りたいです。
http.ResponseWriterいくつかのs が実行された a が与えられた場合.Write()、応答の現在の累積長を直接取得できますか?
これは変換で実行できると確信してHijackいますが、直接実行できるかどうか知りたいです。
インターフェースの根底にあるものを知っていたとしても、http.ResponseWriter何か使えるものがある可能性は低いです。http パッケージの標準を使用して取得した構造体をよく見るとServeHTTP、バッファーの長さを取得する方法がないことがわかりますが、それをハイジャックします。
代わりにできることは、ライターをシャドウすることです。
type ResponseWriterWithLength struct {
http.ResponseWriter
length int
}
func (w *ResponseWriterWithLength) Write(b []byte) (n int, err error) {
n, err = w.ResponseWriter.Write(b)
w.length += n
return
}
func (w *ResponseWriterWithLength) Length() int {
return w.length
}
func MyServant(w http.ResponseWriter, r *http.Request) {
lengthWriter := &ResponseWriterWithLength{w, 0}
}
http.Serverデフォルトで を提供する、独自のバージョンの を作成することもできResponseWriterWithLengthます。