Go 编程 | 连载 30 - 文件 Iu002FO

2022-09-28 16:14:43 浏览数 (1)

一、文件读写

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 函数写入文件内容也是以字节切片的形式写入的

代码语言:javascript复制
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

所有者能够读取、写入和执行,而所有者所在的用户组能够读取

0 人点赞