Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 将围棋中的io.ReadCloser转换为io.Reader_Go_Zip_Reader_Writer - Fatal编程技术网

Go 将围棋中的io.ReadCloser转换为io.Reader

Go 将围棋中的io.ReadCloser转换为io.Reader,go,zip,reader,writer,Go,Zip,Reader,Writer,我正在使用archive/zip库,在上传到s3之前,我需要动态修改zip存档中的文件。目前,我正在返回一个io.ReadCloser,但我用来修改用户的函数需要一个io.Reader: //Function Signature: Convert(r io.Reader, w io.Writer, ...) 我还需要一个io.Writer。。。如果你能帮我决定如何创建一个作家,我会给你加分。下面是一些示例代码,可以提供一些上下文: for _, f := range r.File {

我正在使用
archive/zip
库,在上传到s3之前,我需要动态修改zip存档中的文件。目前,我正在返回一个
io.ReadCloser
,但我用来修改用户的函数需要一个
io.Reader

//Function Signature:
Convert(r io.Reader, w io.Writer, ...)
我还需要一个
io.Writer
。。。如果你能帮我决定如何创建一个作家,我会给你加分。下面是一些示例代码,可以提供一些上下文:

for _, f := range r.File {
    if filepath.Ext(f.Name) != ".txt" {

      _, filename := path.Split(f.Name)
      var rc io.ReadCloser
      if rc, err = f.Open(); err == nil {

        // FIXME: Convert
        if err = Convert(rc.Reader, *zip.Writer.Create(f.Name), ...); err != nil {
          errStr := fmt.Sprintf("Unable to convert")
          log.Println(errStr)

        } else {

          log.Println("Success!")

        }

        // Upload to s3
        .....
      }   
    }   
  }
  • 要将
    io.ReadCloser
    转换为
    io.Reader
    ,需要执行以下操作:

    没什么
    io.ReadCloser
    已经是
    io.Reader
    ,因为
    io.Reader
    接口的所有方法(特别是
    Read(p[]字节)(n int,err error)
    方法)也由
    io.ReadCloser
    提供

  • io.Reader
    转换为
    io.Writer
    是完全不同的事情。一般来说,你不可能做到这一点。你需要详细说明你想做什么

  • 实现
    io.ReadCloser
    接口的类型也实现了
    io.Reader
    接口,因此这种类型的值不需要转换为
    io.Reader
    。编写器很多。是否要写入文件?缓冲区?网络连接?史都?试着用谷歌搜索“GoWrite to”和你想写的任何东西。这取决于你想把数据写到哪里。例如,
    *os.File
    实现了这里提到的所有接口,包括
    io.Writer
    ,因此,您可以打开另一个文件,将(未)压缩的数据写入其中。@NoahGary,如果您询问是否可以修改(通过更改或添加几个字节)或转换(通过将所有字节从A完全转换为B)在一个zip存档中的个人文件,而不必首先解压缩文件,然后,在修改之后,把它们归档,然后我不知道答案,但是你应该考虑重新设置你的问题,因为现在它不清楚你在问什么,而且标题中的问题部分已经被RES。已解决。我可能会删除这个问题,因为它是我刚才提到的问题的副本。我知道我现在需要做什么。只是希望我可以修改存档,而不是解压缩和重新压缩。但这也很好。我明白为什么现在不可能做到这一点。