io.ReadCloser 的使用

亚历山大

有人可以解释(或/和分享示例)何时以及为什么应该明确关闭读者,即实现 io.ReadCloser,而不仅仅是 io.Reader。

废纸

例如,当您处理文件或任何应该关闭以释放分配的资源(或例如用于您的资源的内存,例如C从 调用的代码Go)的资源时
您可以在拥有ReadClose方法时使用它,一个示例表明您可以使用一个通用函数来处理不同类型的使用io.ReadCloser

package main

import (
    "fmt"
    "io"
    "log"
    "os"
)

func main() {
    f, err := os.Open("./main.go")
    if err != nil {
        log.Fatal(err)
    }
    doIt(f)
    doIt(os.Stdin)
}
func doIt(rc io.ReadCloser) {
    defer rc.Close()
    buf := make([]byte, 4)
    n, err := rc.Read(buf)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s\n", buf[:n])
}

运行并输入12345作为输入,输出:

pack
12345
1234

另请参阅:
如果未明确关闭,Go 是否会自动关闭资源?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自io.ReadCloser的ReadLine

来自分类Dev

从zip.NewWriter返回io.ReadCloser

来自分类Dev

我如何从io.ReadCloser转到io.ReadSeeker?

来自分类Dev

在Go中将io.ReadCloser转换为io.Reader

来自分类Dev

如何解压缩io.ReadCloser?

来自分类Dev

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

来自分类Dev

body.Read未定义(类型* io.ReadCloser没有字段或方法Read)

来自分类Dev

转到io.ReadCloser流到文件的最有效方法?

来自分类Dev

在不进行大量分配的情况下在io.ReadCloser中查找字符串

来自分类Dev

将io.ReadCloser转换为字节数组的最有效方法

来自分类Dev

如何将io.ReadCloser流式传输到http.ResponseWriter

来自分类Dev

在Go中,如何重用ReadCloser?

来自分类Dev

使用Java的文件IO

来自分类Dev

使用Ada.Text_IO.Integer_IO

来自分类Dev

使用cgroup限制IO使用

来自分类Dev

如何使用sbt.IO?

来自分类Dev

如何正确使用FileUtils IO?

来自分类Dev

在Express io中使用https

来自分类Dev

如何使用`std::io::Command`

来自分类Dev

使用文件IO创建矩阵

来自分类Dev

更好地使用异步IO

来自分类Dev

使用VUE或vue-socket.io连接Socket.io

来自分类Javascript

Socket.io-无法使用socket.io.js

来自分类Dev

映射文件中的IO与使用文件流的IO

来自分类Dev

在 UDPSocket 中使用 IO#pos 和 IO#seek

来自分类Dev

通过IO :: Socket :: SOCKS代理使用IO :: Socket :: SSL

来自分类Dev

从ReadCloser发送HTTP Put正文永无止境

来自分类Dev

是否可以使用类型类将“ ReaderT(IO)IO a”更改为“ ReaderT(ia)IO a”?

来自分类Dev

使用套接字io,nodejs + angular