go - 如何将 io.Reader 变成 io.ReadCloser?
问题描述
我有一个io.Reader
不需要关闭的:
stringReader := strings.NewReader("shiny!")
我想将它传递给一个接收io.ReadCloser
func readAndClose(source io.ReadCloser) {
...
}
如何在不专门创建实现该方法的结构的情况下将其io.Reader
转换为 a ?io.ReadCloser
Close
解决方案
如果您确定您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)
推荐阅读
- python - 有没有一种快速的方法可以按多列将数据分类到 bin 中?
- react-native - 使用 Android 配置活动的 ReactNative
- django - APM Django - 如何将来自 Filebeat 的容器日志与来自 Kibana 中 ElasticAPM 的数据相关联?
- python - 循环打印数据来自输入用户的 zip 列表
- javascript - 将 Laravel 模型交给具有多个 JSON“深层”的 Vue.js 组件
- javascript - 如何检查对象数组是否是其他数组的子集
- .net - .NET 3.5 的 XSS 预防库
- angular - 我的目标是从指令中获取元素位置并在同一位置打开覆盖层。要打开我尝试使用的覆盖层:
- database - 数字属性的自动增量,这不是 ACCESS 中的 ID
- python - 在python中并行处理25个对象的列表