一、文件读写
Go 中提供了 ioutil
标准库来进行文件读写操作,使用该标准库进行文件读写无须进行关闭操作,该标准库可以完成如下操作:
- 读取文件
- 列出指定目录的内容
- 创建文件
- 写入文件
- 创建临时目录
- 创建临时文件
文件读取
ioutil
标准库下的 Readfile
函数可以以字节切片的方式读取返回文件的内容,因此在结果返回后仍然需要调用 string
内置函数将字节切片转换成字符串。
首先在项目目录下新建一个 info.txt 文件,并输入内容。
代码语言:javascript复制package main
import (
"fmt"
"io/ioutil"
"log"
)
func main(){
byteContent, err := ioutil.ReadFile("info.txt")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(byteContent))
}
执行上述代码,输出结果如下:
代码语言:javascript复制Go is expressive, concise, clean, and efficient.
Its concurrency mechanisms make it easy to write
programs that get the most out of multicore and networked machines,
while its novel type system enables flexible and modular program construction.
输出结果与 info.txt 中的内容一致
使用 ReadFile
函数读取文件之后无须关闭文件,因为 ioutil
标准库几乎就是 os
模块的包装器,可以使用极少的代码完成文件读写,而且无须关系操作之后的关闭操作。
文件创建与写入
WriteFile
函数可以写入内容到文件,当文件不存在时可以创建文件,该函数接收三个参数,第一个是文件名,第二个参数是写入内容,第三个参数是文件的权限。
WriteFile
函数写入文件内容也是以字节切片的形式写入的
package main
import (
"io/ioutil"
"log"
)
func main(){
intro := "The Go programming language is an open source project to make programmers more productive."
err := ioutil.WriteFile("go_intro.txt", []byte(intro), 0777)
if err != nil {
log.Fatal(err)
}
}
执行上述代码后,可以发现在项目目录中多处一个 go_intro.txt 文件
现在我们将写入的目标文件改为已存在的 info.txt,再次执行代码,查看 info.txt 文件
可以发现,文件内容已经被替换。
WriteFile
函数的第三个参数表示文件的权限,部分常用的权限符号表示和数字表示如下:
权限符号表示 | 权限数字表示 | 权限说明 |
---|---|---|
---------- | 0000 | 无权限 |
-rwx------- | 0700 | 只有所有者能够读取、写入和执行 |
-rwxrwx--- | 0700 | 所有者及其所在的用户组能够读取、写入和执行 |
-rwxrwxrwx | 0700 | 所有人都能够读取、写入和执行 |
---x--x--x | 0111 | 所有人都能够执行 |
--w--w--w- | 0222 | 所有人都能够写入 |
--wx-wx-wx | 0333 | 所有人都能够写入和执行 |
-r--r--r-- | 0444 | 所有人都能够读取 |
-r-xr-xr-x | 0555 | 所有人都能够读取和执行 |
-rw-rw-rw- | 0666 | 所有人都能够读取和写入 |
-rwxr----- | 0740 | 所有者能够读取、写入和执行,而所有者所在的用户组能够读取 |