組み込みのテンプレートシステムを使用してWebページを返すコードがあります。結果のマークアップが書き込まれるResponseWriter
を受け入れます。マークアップ文字列としてを取得し、場合によってはデータベースに入れたいと思います。私はWriter
の代わりに通常のResponseWriter
を受け入れるメソッドを除外し、書かれたコンテンツを取得しようとしています。 Aha-Pipe
が必要な場合があり、ReadString
ライブラリからbufio
で文字列を取得できます。しかし、パイプから出てくるPipeReader
はReader
と互換性がないことがわかりました(ReadString
メソッドに必要です)。 W00t。ビッグサプライズ。したがって、PipeReader
を使用してbyte []を読み取ることができましたが、ReadString
が存在する場合は少し間違っているように感じます。
それでは、それを行う最善の方法は何でしょうか? Pipe
に固執してバイトを読む必要がありますか、それともマニュアルにないものがありますか?
関数がio.Writerを受け入れる場合、*bytes.Buffer
を渡して出力をキャプチャできます。
// import "bytes"
buf := new(bytes.Buffer)
f(buf)
buf.String() // returns a string of what was written to it
Http.ResponseWriterが必要な場合は、*httptest.ResponseRecorder
を使用できます。応答レコーダーには、ResponseWriterに送信できるすべての情報が保持されますが、本文は*bytes.Buffer
にすぎません。
// import "net/http/httptest"
r := httptest.NewRecorder()
f(r)
r.Body.String() // r.Body is a *bytes.Buffer