Go 如何将io.Reader转换为io.ReadCloser?

Go 如何将io.Reader转换为io.ReadCloser?,go,Go,我有一个不需要关闭的io.Reader: stringReader := strings.NewReader("shiny!") 我想把它传递给一个方法,该方法接收一个io.ReadCloser func readAndClose(source io.ReadCloser) { ... } 如何将io.Reader转换为io.ReadCloser,而无需专门创建实现Close方法的结构?如果您确定io.Reader不需要任何实际的关闭,可以使用 Go 1.16更新 从版本1.16开始

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

stringReader := strings.NewReader("shiny!")
我想把它传递给一个方法,该方法接收一个
io.ReadCloser

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

如何将
io.Reader
转换为
io.ReadCloser
,而无需专门创建实现
Close
方法的结构?

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

Go 1.16更新 从版本1.16开始,
ioutil.nocloser
is

nocloser
已移动到:

1.15及以上 godoc:

nocloser返回一个ReadCloser,其中包含一个no-op-Close方法,该方法包装提供的读取器r

因此,我们可以像这样应用它:

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

以上是我的问题,我在StackOverflow中找不到答案。我发现它埋在一些论坛帖子里,我想这可能是很好的分享。“回答您自己的问题”复选框中没有说明“分享您的知识,问答式”。这有什么不诚实的地方吗?@Adrian作为一个已经存在了10年的人,你应该意识到这个社区完全可以回答你自己的问题。第一个搜索结果是搜索
reader readcloser
:所有东西都在互联网上出现过不止一次。就这样吧。关闭副本万岁。复制品万岁。谢谢,@noamt如果没有
iotuil
该怎么办?从1.16 golangFYI开始,它就被弃用了:这个问题被标记为重复,但实际上它是一个不同的问题。虽然这两个问题的答案是相同的,但这并不是将该问题标记为重复问题的理由
stringReader := strings.NewReader("shiny!")
stringReadCloser := ioutil.NopCloser(stringReader)