首页 > 解决方案 > 如何将 io.Reader 变成 io.ReadCloser?

问题描述

我有一个io.Reader不需要关闭的:

stringReader := strings.NewReader("shiny!")

我想将它传递给一个接收io.ReadCloser

func readAndClose(source io.ReadCloser) {
    ...
}

如何在不专门创建实现该方法的结构的情况下将其io.Reader转换为 a ?io.ReadCloserClose

标签: go

解决方案


如果您确定您io.Reader不需要任何实际关闭,您可以用ioutil.NopCloser.

去 1.16 更新

自 1.16 版起ioutil.NopCloser弃用

NopCloser已移至io

stringReader := strings.NewReader("shiny!")
stringReadCloser := io.NopCloser(stringReader)

Go 1.15 及以上版本

来自 godoc:

NopCloser 返回一个 ReadCloser,其中包含一个包装提供的 Reader r 的无操作 Close 方法。

所以我们可以像这样应用它:

stringReader := strings.NewReader("shiny!")
stringReadCloser := ioutil.NopCloser(stringReader)

推荐阅读