给定一个io.ReadCloser,例如从HTTP请求的响应中,在内存开销和代码可读性方面将响应流式传输到文件的最有效方法是什么? 最佳答案 io.Copy在代码方面无疑是最高效的;你只需要outFile,err:=os.Create(filename)//handleerrdeferoutFile.Close()_,err=io.Copy(outFile,res.Body)//handleerr它在CPU和内存方面也可能非常高效。你可以偷看implementationofio.Copy如果你想;假设主体没有实现WriteTo并且文
我从http服务获取数据,我想即时解压它。这是我目前的方法:resp,err:=http.Get(url)iferr!=nil{logger.Fatalf("Can'tfatch%sdata.%v",url,err)}logger.Info("Fetcheddatafrom%s",url)content_zipped,err:=ioutil.ReadAll(resp.Body)resp.Body.Close()iferr!=nil{logger.Fatal(err)}zip_reader,err:=zip.NewReader(bytes.NewReader(content_zipped
我有一个客户端发出下载文件的请求,Web服务器将此请求转发到实际保存该文件的资源服务器。从资源服务器返回的*http.Response有Bodyio.ReaderCloser从资源服务器流式传输文件内容。但是我正处于我想开始将其写入来自客户端的原始http.ResponseWriter的地步。查看http.ResponseWriter接口(interface),它只包含一个采用byteslice段的Write方法,这让我认为将文件内容返回给客户端的唯一方法是将Bodyio.ReaderCloser读入缓冲区,然后将其放入http.ResponseWriter的Write方法中。我不想这
我有一个非常简单的Go网络服务器。它的工作是接收入站json有效负载。然后它将有效负载发布到一个或多个需要字节数组的服务。无需检查有效负载。刚发过来。在这种情况下,它会接收入站作业并将其发送到GooglePubSub。它可能是另一项服务-这并不重要。我正在尝试找到最有效的方法来将对象转换为字节数组,而无需先对其进行解码。为什么?在一台服务器上解码和转换为JSON似乎有点浪费,只是稍后解码它。另外,我不想在两个包中维护两个相同的结构。如何将io.ReadCloser转换为字节数组,所以我只需要解码一次。我试过这样的答案,但也不认为这是最有效的方法:Fromio.Readertostrin
我正在尝试从S3下载文件并将该文件上传到S3中的另一个存储桶。CopyAPI在这里不起作用,因为我被告知不要使用它。从S3获取对象有一个response.Body,它是一个io.ReadCloser并且要上传该文件,有效负载需要一个Body那是一个io.ReadSeeker。我能解决这个问题的唯一方法是将response.Body保存到一个文件中,然后将该文件作为io.ReadSeeker传递。这需要先将整个文件写入磁盘,然后再从磁盘读取整个文件,这听起来很错误。我想做的是:resp,_:=conn.GetObject(&s3.GetObjectInput{Key:"bla"})con
我正在尝试从S3下载文件并将该文件上传到S3中的另一个存储桶。CopyAPI在这里不起作用,因为我被告知不要使用它。从S3获取对象有一个response.Body,它是一个io.ReadCloser并且要上传该文件,有效负载需要一个Body那是一个io.ReadSeeker。我能解决这个问题的唯一方法是将response.Body保存到一个文件中,然后将该文件作为io.ReadSeeker传递。这需要先将整个文件写入磁盘,然后再从磁盘读取整个文件,这听起来很错误。我想做的是:resp,_:=conn.GetObject(&s3.GetObjectInput{Key:"bla"})con