在 Go 中将 io.ReadCloser 转换为 io.Reader

Convert io.ReadCloser into io.Reader in Go

我正在使用 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
        .....
      }   
    }   
  }
  1. 要将 io.ReadCloser 转换为 io.Reader,您需要执行以下操作:

    没有!

    io.ReadCloser 已经是 io.Reader,因为 io.Reader 接口的所有方法(特别是 Read(p []byte) (n int, err error) 方法)也由 io.ReadCloser.

  2. io.Reader 转换为 io.Writer 是完全不同的事情。你不能以任何一般方式真正做到这一点。您需要详细说明您要做什么。