为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中“桥接”作者和读者

如何在 Go 中“桥接”作者和读者

Go
侃侃无极 2021-12-07 19:01:26
我通常在 Golang 中使用 Reader 和 Writer 找到自己的方式,但我遇到了一个新情况。我正在使用“golang.org/x/net/html”渲染。它输出到 Writer w。我想使用该输出并从中创建一个新请求。NewRequest 使用 Reader r。err := html.Render(w, msg)...req, err := http.NewRequest("Post", url, r)io.Copy(w, r)我的问题是“使用 w 和 r 绑定两个调用的最佳/理想解决方案是什么?”。我在网上找不到类似情况的例子。我正在考虑创建 Reader 和 Writer 并在它们上使用 io.Copy(w, r) 。我不确定,因为这对于显然经常使用的东西来说似乎有点复杂。
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

一个简单的方法是使用bytes.Buffer:


var buf bytes.Buffer

err := html.Render(&buf, msg)

...

req, err := http.NewRequest("POST", url, &buf)

这会在内存中缓冲整个请求。不缓冲内存中所有内容的另一种方法是使用io.Pipe。这种方法比较复杂,因为它在程序中引入了并发性。此外,在 Render 中检测到可能的错误之前,http 客户端开始将请求写入线路。


r, w := io.Pipe()

go func() {

    w.CloseWithError(html.Render(w, msg))

}()

req, err := http.NewRequest("POST", url, r)


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信