Go 编程 | 连载 30 - 文件 I/O

简介: Go 编程 | 连载 30 - 文件 I/O

一、文件读写

Go 中提供了 ioutil 标准库来进行文件读写操作,使用该标准库进行文件读写无须进行关闭操作,该标准库可以完成如下操作:

  • 读取文件
  • 列出指定目录的内容
  • 创建文件
  • 写入文件
  • 创建临时目录
  • 创建临时文件

文件读取

ioutil 标准库下的 Readfile 函数可以以字节切片的方式读取返回文件的内容,因此在结果返回后仍然需要调用 string 内置函数将字节切片转换成字符串。

首先在项目目录下新建一个 info.txt 文件,并输入内容。

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))
}
复制代码

执行上述代码,输出结果如下:

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 中的内容一致

image.png

使用 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 文件

image.png

现在我们将写入的目标文件改为已存在的 info.txt,再次执行代码,查看 info.txt 文件

image.png

可以发现,文件内容已经被替换。

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 所有者能够读取、写入和执行,而所有者所在的用户组能够读取


相关文章
|
13天前
|
存储 缓存 Go
go语言编程系列(五)
go语言编程系列(五)
|
13天前
|
搜索推荐 Java 编译器
go语言编程系列(四)
go语言编程系列(四)
|
13天前
|
存储 JSON 安全
go语言编程系列(七)
go语言编程系列(七)
|
13天前
|
存储 安全 编译器
go语言编程系列(六)
go语言编程系列(六)
|
13天前
|
自然语言处理 Java 测试技术
go语言编程系列(二)
go语言编程系列(二)
|
13天前
|
编译器 Go
go语言编程系列(三)
go语言编程系列(三)
|
13天前
|
安全 Java Go
Go语言编程系列(一)
Go语言编程系列(一)
|
1月前
|
Kubernetes Go Docker
在K8s编程中如何使用Go
一文带你了解在K8s编程中如何使用Go
46 3
|
2月前
|
数据库连接 Go API
Golang中的25个常见错误:更好地进行go编程的综合指南
Golang中的25个常见错误:更好地进行go编程的综合指南
|
2月前
|
存储 Unix 测试技术
解释Go中常见的I/O模式
解释Go中常见的I/O模式