在 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
.....
}
}
}
要将 io.ReadCloser
转换为 io.Reader
,您需要执行以下操作:
没有!
io.ReadCloser
已经是 io.Reader
,因为 io.Reader
接口的所有方法(特别是 Read(p []byte) (n int, err error)
方法)也由 io.ReadCloser
.
将 io.Reader
转换为 io.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 {
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 []byte) (n int, err error)
方法)也由io.ReadCloser
.将
io.Reader
转换为io.Writer
是完全不同的事情。你不能以任何一般方式真正做到这一点。您需要详细说明您要做什么。