当前位置: > > > > io.ReadCloser 的用途
来源:stackoverflow
2024-04-26 08:18:32
0浏览
收藏
一分耕耘,一分收获!既然打开了这篇文章《io.ReadCloser 的用途》,就坚持看下去吧!文中内容包含等等知识点…希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!
问题内容
有人可以解释(或/和分享示例)何时以及为什么应该显式关闭读者,即实现 io.ReadCloser,而不仅仅是 io.Reader。
解决方案
例如,当您正在处理文件或任何应关闭以释放分配的资源(或资源的内存,例如从 go
调用的 c
代码)时。
当您有 read
和 close
方法时,您可以使用它,这是一个示例,说明您可以使用一个通用函数来使用 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
另请参阅:
用于明确定义reader和closer接口。假设您编写了一些读取数据的功能,但您还想在完成后关闭资源(同样不要泄漏描述符)。
func ...(r io.ReaderCloser) { defer r.Close() ... // some reading }
您传入的任何内容都需要定义两个接口,是 os.file 还是任何自定义结构,在这种情况下,您将强制 api 的客户端定义 read
和 close
接口实现,而不仅仅是 io.reader .
终于介绍完啦!小伙伴们,这篇关于《io.ReadCloser 的用途》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~公众号也会发布Golang相关知识,快来关注吧!