Anche se sapresti quello che si ottiene, sottostante l'interfaccia http.ResponseWriter
, le probabilità sono basse, che c'è qualcosa di utilizzabile. Se si look closer alla struct si ottiene utilizzando lo standard ServeHTTP
del pacchetto HTTP, vedrete che non c'è modo per raggiungere la lunghezza del buffer, ma dirottamento esso.
Cosa si può fare in alternativa, è shadowing lo scrittore:
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}
}
Si potrebbe anche voler scrivere la propria versione di http.Server
, che serve la ResponseWriterWithLength
per impostazione predefinita.
Questo è esattamente quello che stavo cercando di indovinare. Grazie per la conferma. –
L'unico problema di questo approccio è che non tiene conto di lunghezza intestazioni. – dolzenko