有人可以解释(或/和分享示例)何时以及为什么应该明确关闭读者,即实现 io.ReadCloser,而不仅仅是 io.Reader。
例如,当您处理文件或任何应该关闭以释放分配的资源(或例如用于您的资源的内存,例如C
从 调用的代码Go
)的资源时。
您可以在拥有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
另请参阅:
如果未明确关闭,Go 是否会自动关闭资源?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句