登录
首页 >  Golang >  Go问答

io.ReadCloser 的用途

来源:stackoverflow

时间:2024-04-26 08:18:32 435浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《io.ReadCloser 的用途》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

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


解决方案


例如,当您正在处理文件或任何应关闭以释放分配的资源(或资源的内存,例如从 go 调用的 c 代码)时。
当您有 readclos​​e 方法时,您可以使用它,这是一个示例,说明您可以使用一个通用函数来使用 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

另请参阅:
Does Go automatically close resources if not explicitly closed?

用于明确定义reader和closer接口。假设您编写了一些读取数据的功能,但您还想在完成后关闭资源(同样不要泄漏描述符)。

func ...(r io.ReaderCloser) {
    defer r.Close()
    ... // some reading
}

您传入的任何内容都需要定义两个接口,是 os.file 还是任何自定义结构,在这种情况下,您将强制 api 的客户端定义 readclos​​e 接口实现,而不仅仅是 io.reader .

终于介绍完啦!小伙伴们,这篇关于《io.ReadCloser 的用途》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>