一尘不染

从 Writer 获取字符串的最佳方法

go

我有一段使用内置模板系统返回网页的代码。它接受ResponseWriter写入结果标记的a 。在某些情况下,我现在想将标记作为字符串放入数据库中。我找出了一种接受法线Writer而不是a 的方法,ResponseWriter现在正在尝试获取书面内容。啊哈 - aPipe可能是我需要的,然后我可以ReadStringbufio库中获取字符串。但事实证明,PipeReader从管道中出来的东西不兼容Reader(我需要该ReadString方法)。W00t。大惊喜。所以我可以使用 the 读入 byte[]s ,PipeReader但在ReadString那里时感觉有点错误。

那么最好的方法是什么?我应该坚持使用Pipe并读取字节还是手册中没有找到更好的东西?


阅读 170

收藏
2021-12-27

共1个答案

一尘不染

如果您的函数接受 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
2021-12-27