我有一段使用内置模板系统返回网页的代码。它接受ResponseWriter写入结果标记的a 。在某些情况下,我现在想将标记作为字符串放入数据库中。我找出了一种接受法线Writer而不是a 的方法,ResponseWriter现在正在尝试获取书面内容。啊哈 - aPipe可能是我需要的,然后我可以ReadString从bufio库中获取字符串。但事实证明,PipeReader从管道中出来的东西不兼容Reader(我需要该ReadString方法)。W00t。大惊喜。所以我可以使用 the 读入 byte[]s ,PipeReader但在ReadString那里时感觉有点错误。
ResponseWriter
Writer
Pipe
ReadString
bufio
PipeReader
Reader
那么最好的方法是什么?我应该坚持使用Pipe并读取字节还是手册中没有找到更好的东西?
如果您的函数接受 io.Writer,您可以传递 a*bytes.Buffer来捕获输出。
*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.
*httptest.ResponseRecorder
// import "net/http/httptest" r := httptest.NewRecorder() f(r) r.Body.String() // r.Body is a *bytes.Buffer