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

noa*_*amt 9 go

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

stringReader := strings.NewReader("shiny!")
Run Code Online (Sandbox Code Playgroud)

我想把它传递给一个接收一个的方法 io.ReadCloser

func readAndClose(source io.ReadCloser) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

如何io.Readerio.ReadCloser没有专门创建实现该Close方法的结构的情况下将其转换为a ?

noa*_*amt 18

如果你确定你io.Reader不需要任何实际关闭,你可以用一个包裹它ioutil.NopCloser.

来自godoc:

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

所以我们可以应用它:

stringReader := strings.NewReader("shiny!")
stringReadCloser := ioutil.NopCloser(stringReader)
Run Code Online (Sandbox Code Playgroud)

  • @Adrian作为一个已经在SO工作了10年的人,你应该意识到这个社区完全可以回答你自己的问题. (5认同)
  • 以上是我的问题,我在StackOverflow中找不到答案.我发现它埋藏在一些论坛帖子中,我认为分享可能会很好."回答您自己的问题"复选框确实声明"分享您的知识,Q&A风格".这有什么不诚实的? (4认同)
  • 第一个搜索SO的读者阅读器的结果:/sf/ask/1971129331/ (3认同)