Yifei Kong

Jul 15, 2018

Go语言读写文件相关函数对比

文件 IO

io.Readerio.Writer。这两个是两个特别重要的 interface。一般来说凡是可以抽象为输入的 IO 操作都会使用 io.Reader。凡是可以抽象为输出的 IO 操作都会使用 io.Writer。

io/ioutil

对于配置文件等等比较小的常规文件,一般来说我们可以使用 io/ioutil 包中的辅助函数操作就好了,比较快捷方便。

函数签名 说明
func NopCloser(r io.Reader) io.ReadCloser 把 io.Reader 包装成一个 io.ReadWriter
func ReadAll(r io.Reader) ([]byte, error) 读取所有字符,成功的话 err == nil
func ReadDir(dirname string) ([]os.FileInfo, error) 读取当前目录的所有文件
func ReadFile(filename string) ([]byte, error) 读取文件的所有内容
func TempDir(dir, prefix string) (name string, err error) 创建临时目录
func TempFile(dir, prefix string) (f *os.File, err error) 创建临时文件
func WriteFile(filename string, data []byte, perm os.FileMode) error 写入文件

对于比较大的文件,直接使用 ioutil.ReadFile 读到内存里显然是不现实的,这时候应该使用 os 模块中的函数。

文件操作

其他语言中一般统一通过 open(filename, rw) 这个函数来打开文件,而 golang 中有所 不同,一般来说是通过 os.Open(filename) 打开文件用于读取,使用 os.Create(filename) 打开文件用于写入。