【问题标题】:How do I turn an io.Reader into a io.ReadCloser? [duplicate]如何将 io.Reader 变成 io.ReadCloser? [复制]
【发布时间】:2019-02-04 04:50:18
【问题描述】:

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

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

我想将它传递给接收io.ReadCloser的方法

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

如何在不专门创建实现Close 方法的结构的情况下将io.Reader 转换为io.ReadCloser

【问题讨论】:

  • 仅供参考:这个问题已被标记为重复,但它实际上是一个不同的问题。虽然这两个问题的答案是相同的,但这并不是将问题标记为重复的理由。 ;-)

标签: go


【解决方案1】:

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

Go 1.16 更新

截至 1.16 版,ioutil.NopCloserdeprecated

NopCloser 已移至io

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

转到 1.15 及更早版本

来自 godoc:

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

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

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

【讨论】:

  • 以上是我的问题,我在 StackOverflow 中找不到答案。我发现它隐藏在一些论坛帖子中,我认为分享它可能会很好。 “回答您自己的问题”复选框确实说明“分享您的知识,问答式”。这有什么不诚实的?
  • @Adrian 作为已经在 SO 工作了 10 年的人,您应该知道这个社区非常适合回答您自己的问题。
  • 搜索reader readcloser的第一个结果:stackoverflow.com/questions/28158990/golang-io-ioutil-nopcloser
  • 一切都已经在互联网上不止一次之前 SO。随它吧。万岁关闭重复。万岁重复。谢谢,@noamt
  • 没有iotuil 的方法是什么?从 1.16 golang 开始,它已被弃用
猜你喜欢
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 2015-10-08
  • 2020-01-29
  • 1970-01-01
相关资源
最近更新 更多