69

組み込みのテンプレート システムを使用して Web ページを返すコードがあります。ResponseWriter結果のマークアップが書き​​込まれる を受け入れます。マークアップを文字列として取得し、場合によってはデータベースに入れたいと思います。Writerの代わりに法線を受け入れるメソッドを取り出し、ResponseWriter現在、記述されたコンテンツに到達しようとしています。あはは - aが必要なものかもしれません。ライブラリからPipe文字列を取得できます。しかし、パイプからの出力は互換性がないことがわかりました(メソッドに必要です)。W00t。ビッグサプライズ。そのため、を使用して byte[] に読み込むことができましたが、そこにあると少し間違っているように感じます。ReadStringbufioPipeReaderReaderReadStringPipeReaderReadString

それで、それを行うための最良の方法は何ですか?に固執してPipeバイトを読み取る必要がありますか、それともマニュアルで見つけられなかったより良いものがありますか?

4

2 に答える 2

162

関数が io.Writer を受け入れる場合、a を渡し*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
于 2012-12-07T15:29:22.293 に答える
-7

以下のコードは、おそらく Writer (または任意の型) を文字列に変換する最も簡単な方法です。

package main

import "fmt"
import "io"
import "reflect"

func main(){
    var temp io.Writer
    output := fmt.Sprint(temp)
    fmt.Println(reflect.TypeOf(output))

}

出力:

string
于 2016-06-29T08:59:25.427 に答える