链接:https://www.jianshu.com/p/7790ca1bc8f6

來源:简书

最近在使用Golang进行文件读写的过程中,遇到几个细节问题导致程序写入数据时有一定脏数据的残留,最后发现是使用在进行文件操作的时候没有使用正确的造成的。因此专门去学习了下Golang中读写文件的几种方式方法。

读文件

使用golang语言去读取一个文件默认会有多种方式,这里主要介绍以下几种。

使用ioutil直接读取

需要引入包,该包默认拥有以下函数供用户调用。

读文件,我们可以看以下三个函数:

读取文件示例:

借助os.Open进行读取文件

由于是打开一个文件并返回一个文件对象,因此其实可以结合来进行读取。

其实是一个包含方法的接口类型,而文件对象本身是实现了了方法的。

我们先来看下家族的相关函数

使用家族函数和读取文件示例:

然而上述方式会比较繁琐一些,因为使用了的同时借助了,但是在读取大文件的时候还是比较有优势的。不过读取小文件可以直接使用文件对象的一些方法。

不论是上边说的还是他们最终都返回了一个文件对象,而该文件对象默认是有很多方法的,其中读取文件的方法有如下几种:

使用文件对象的方法读取:

使用os.Open和bufio.Reader读取文件内容

包实现了缓存IO,它本身包装了和对象,创建了另外的Reader和Writer对象,不过该种方式是带有缓存的,因此对于文本I/O来说,该包是提供了一些便利的。

先看下模块下的相关的函数方法:

示例:

读取文件全部示例

写文件

那么上述几种方式来读取文件的方式也支持文件的写入,相关的方法如下:

使用ioutil包进行文件写入

示例:

使用os.Open相关函数进行文件写入

因为系列的函数会打开文件,并返回一个文件对象指针,而该文件对象是一个定义的结构体,拥有一些相关写入的方法。

文件对象结构体以及相关写入文件的方法:

使用WriteString()j进行文件写入发现经常新内容写入时无法正常覆盖全部新内容。(是因为字符串长度不一样)

示例:

使用打开文件并进行文件内容更改,需要注意相关的参数以及含义。

使用io包中的相关函数写入文件

在包中有一个函数,用来将字符串写入一个对象中。

示例:

使用包中的相关函数写入文件

和包中很多操作都是相似的,唯一不同的地方是提供了一些缓冲的操作,如果对文件I/O操作比较频繁的,使用还是能增加一些性能的。

在包中,有一个结构体,而其相关的方法也支持一些写入操作。

示例:

写文件全部示例

Golang语言社区

游戏服务器架构丨分布式技术丨大数据丨游戏算法学习