点击上方蓝色“ Go语言中文网 ”关注我们, 领全套Go资料 ,每天学习 Go 语言
Go 语言在进行文件操作的时候,可以有多种方法。最常见的比如直接对文件本身进行Read
和Write
;除此之外,还可以使用bufio
库的流式处理以及分片式处理;如果文件较小,使用ioutil
也不失为一种方法。
面对这么多的文件处理的方式,那么初学者可能就会有困惑:我到底该用那种?它们之间有什么区别?笔者试着从文件读取来对 go 语言的几种文件处理方式进行分析。
os.File、bufio、ioutil 比较
效率测试
文件的读取效率是所有开发者都会关心的话题,尤其是当文件特别大的时候。为了尽可能的展示这三者对文件读取的性能,我准备了三个文件,分别为small.txt
,midium.txt
、large.txt
,分别对应 KB 级别、MB 级别和 GB 级别。
这三个文件大小分别为 4KB、21MB、1GB。其中内容是比较常规的json
格式的文本。测试代码如下:
//使用File自带的Read
read1
函数使用的是os
库对文件进行直接操作,为了确定确实都到了文件内容,并将读到的大小字节数返回。
//使用bufio
read2
函数使用的是bufio
库,操作NewReader
对文件进行流式处理,和前面一样,为了确定确实都到了文件内容,并将读到的大小字节数返回。
//使用ioutil