返回介绍

标准库封装

发布于 2024-10-12 12:11:00 字数 1996 浏览 0 评论 0 收藏 0

Go 对文件进行读写非常简单,因为 Go 已经封装了一个非常便捷的使用接口,位于标准库 os 中。Go 标准库对文件 IO 的封装也就是 Go 推荐对文件进行 IO 时使用的操作方式。

打开文件(Open)

func OpenFile(name string, flag int, perm FileMode) (*File, error)

Open 文件之后,获取到一个句柄,也就是 File 结构,之后对文件的读写都是基于 File 结构之上进行的。

type File struct {
    *file // os specific
}

文件读写只需要针对这个句柄结构体做操作即可。

另外有一点隐藏起来的知识点必须要提一下: 偏移 。也就是最开始强调的读写 3 要素之一的 Offset 。打开( Open )文件的时候,文件当前偏移量默认设置为 0,也就是说 IO 的起始位置就是文件的最开头。举个例子,如果这个时候,写 4K 的数据到文件,那么就是写 [0, 4K] 这个位置的数据,如果之前这上面已经有数据了,那么就会是覆盖写。

除非 Open 文件的时候指定 O_APPEND 选项,偏移量会设置为文件末尾,那么 IO 都是从文件末尾开始。

文件写操作(Write)

文件 File 句柄对象有两个写方法:

第一种:写一个 buffer 到文件 ,使用文件当前偏移

func (f *File) Write(b []byte) (n int, err error)

注意:该写操作会导致文件偏移量的增加。

第二种:从指定文件偏移,写入 buffer 到文件

func (f *File) WriteAt(b []byte, off int64) (n int, err error)

注意:该写操作不会更新文件偏移量

文件读操作(Read)

和写对应,文件 File 句柄对象有两个读方法:

第一种:从文件当前偏移读一个 buffer 的数据上来

func (f *File) Read(b []byte) (n int, err error)

注意:该读操作会导致文件偏移量的增加。

第二种:从指定文件偏移,读一个 buffer 大小的数据上来

func (f *File) ReadAt(b []byte, off int64) (n int, err error)

注意:该读操作不会更新文件偏移量

指定偏移量(Seek)

func (f *File) Seek(offset int64, whence int) (ret int64, err error)

这个句柄方法允许用户指定文件的偏移位置。这个很容易理解,举个例子,文件刚开始是 0 字节,写 1M 的数据下去,大小变成 1M,Offset 往后挪 1M ,默认就是往后挪。

现在 Seek 方法允许把写的偏移定位到任意位置,可以就可以从任意地方覆盖写入数据。

所以在 Go 里面,文件 IO 非常简单,先 Open 一个文件,拿到 File 句柄,然后就可以使用这个句柄 Write ,Read,Seek 就能进行 IO 了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文