一尘不染

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

go

我正在编写一个长期运行的任务,该任务多次从mongodb(使用mgo)获取。然后使用此模块将其写入xlsx文件。然后使用os.Open重新读取,然后将其存储到我的ftp服务器中。

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

这些是功能的原型

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

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


阅读 207

收藏
2020-07-02

共1个答案

一尘不染

您要使用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

您可能想要writer.CloseWithError(err)if xlsx.Write返回错误而不关闭编写器。

2020-07-02