45 | 使用os包中的API (下)
我们在上一篇文章中。从“os.File类型都实现了哪些io包中的接口”这一问题出发,介绍了一系列的相关内容。今天我们继续围绕这一知识点进行扩展。
知识扩展
问题 1:可应用于File值的操作模式都有哪些?
针对File值的操作模式主要有只读模式、只写模式和读写模式。
这些模式分别由常量os.O_RDONLY、os.O_WRONLY和os.O_RDWR代表。在我们新建或打开一个文件的时候,必须把这三个模式中的一个设定为此文件的操作模式。
除此之外,我们还可以为这里的文件设置额外的操作模式,可选项如下所示。
- os.O_APPEND:当向文件中写入内容时,把新内容追加到现有内容的后边。
- os.O_CREATE:当给定路径上的文件不存在时,创建一个新文件。
- os.O_EXCL:需要与os.O_CREATE一同使用,表示在给定的路径上不能有已存在的文件。
- os.O_SYNC:在打开的文件之上实施同步 I/O。它会保证读写的内容总会与硬盘上的数据保持同步。
- os.O_TRUNC:如果文件已存在,并且是常规的文件,那么就先清空其中已经存在的任何内容。
对于以上操作模式的使用,os.Create函数和os.Open函数都是现成的例子。
func Create(name string) (*File, error) {
return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}
os.Create函数在调用os.OpenFile函数的时候,给予的操作模式是os.O_RDWR、os.O_CREATE和os.O_TRUNC的组合。
这就基本上决定了前者的行为,即:如果参数name代表路径之上的文件不存在,那么就新建一个,否则,先清空现存文件中的全部内容。
并且,它返回的File值的读取方法和写入方法都是可用的。这里需要注意,多个操作模式是通过按位或操作符|组合起来的。
func Open(name string) (*File, error) {
return OpenFile(name, O_RDONLY, 0)
}
我在前面说过,os.Open函数的功能是:以只读模式打开已经存在的文件。其根源就是它在调用os.OpenFile函数的时候,只提供了一个单一的操作模式os.O_RDONLY。
以上,就是我对可应用于File值的操作模式的简单解释。在 demo88.go 文件中还有少许示例,可供你参考。
package main
import (
"fmt"
"io/ioutil"