我正在写一个长期运行的任务,从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
hob*_*bbs 11
你想使用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
Run Code Online (Sandbox Code Playgroud)
您可能希望writer.CloseWithError(err)
if xlsx.Write
在不关闭writer的情况下返回错误.