go - 如何连接 io.Reader 和 io.Writer?

标签 go io

我正在编写一个长时间运行的任务,它多次从 mongodb(使用 mgo)获取。然后使用 this module 将其写入 xlsx 文件.然后使用 os.Open 再次读取它,然后将其存储到我的 ftp 服务器。

Stor 函数非常消耗我的内存,所以我认为应该有一种方法不保存文件而是将我的数据从 xlsx.Write 直接传递到 ftp.Store。 (如果我可以同时流式传输就完美了,因为我不必在将所有文档发送到 Stor 函数之前将它们保存在服务器的内存中)

这些是函数的原型(prototype)

func (f *File) Write(writer io.Writer) (err 错误) xlsl

func (ftp *FTP) Stor(path string, r io.Reader) (err 错误) ftp

最佳答案

您想使用 io.Pipe .你可以这样做:

reader, writer := io.Pipe()
errChan := make(chan error)
go func() {
    errChan <- myFTP.Stor(path, reader)
}()
err := myXLS.Write(writer)
// handle err
err = <-errChan
// handle err

如果 xlsx.Write 在不关闭编写器的情况下返回错误,您可能想要 writer.CloseWithError(err)

关于go - 如何连接 io.Reader 和 io.Writer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259812/

相关文章:

regex - 如何从Markdown中提取链接

go - 如何正确使用 FirstOrCreate

go - 在go中增加结构变量

json - 解码一个 json 流(不是换行符分隔的)

java.io.IOException : Permission denied on network folder 异常

python - 涉及 `read` 的 Haskell 程序比等效的 Python 程序慢得多

c 文件我得到的只是一个无限循环

linux - Shell 重定向和文件 I/O 持续时间

ubuntu - 如何从 GO 语言的程序中给出 ubuntu 终端命令?

java - 为什么我的 zip 文件中的图像已损坏?