49、Go语言基础 - IO编程 - 输入和输出

作者: 温新

分类: 【Go基础】

阅读: 2257

时间: 2023-12-05 00:42:16

hi,我是温新

Go 语言将 I/O 操作封装在如下几个包中:

  • io:为 I/O 原语提供基本的接口,在 io 包中最重要的是两个接口:Reader 和 Writer 接口;
  • fmt:实现格式化 I/O;
  • bufio:实现带缓冲的 I/O。

io:基本 I/O 接口

io 包是 Go 标准库中的一个核心包,它提供了用于进行输入和输出操作的接口和函数。这个包包含了多个接口和类型,用于处理文件、网络、内存和其他数据源的输入和输出。

IO 包主要组件和概念

  1. 接口:
    • io.Reader:代表一个可读取数据的接口。它定义了一个 Read 方法,用于从数据源读取数据到字节切片。
    • io.Writer:代表一个可写入数据的接口。它定义了一个 Write 方法,用于将数据写入目标。
    • io.Closer:代表一个可以关闭的接口,通常用于关闭文件或网络连接。它定义了一个 Close 方法。
    • io.Seeker:代表一个可以寻址的接口,通常用于定位和设置数据源的位置。它定义了一个 Seek 方法。
  2. 类型:
    • io.Reader 和 io.Writer 接口的常见实现类型,如 bytes.Buffer、os.File、net.Conn 等。
    • io.Pipe:用于创建一个管道,允许一个协程写入数据并另一个协程从中读取数据。
  3. 函数:
    • io.Copy:用于将数据从一个 io.Reader 复制到一个 io.Writer。
    • io.ReadFull:用于从 io.Reader 中读取固定数量的字节。
    • io.ReadAll:用于从 io.Reader 中读取所有可用的数据,通常用于内存缓冲区。
    • io.WriteString:用于向 io.Writer 写入字符串。
  4. 错误处理:
    • io.EOF:代表文件或数据流结束的错误。
    • io.ErrUnexpectedEOF:代表意外的文件结束错误。

fmt 格式化 I/O

fmt 包是 Go 标准库中的一个核心包,用于格式化输入和输出。它提供了一系列函数和方法,用于格式化文本、数字、日期等数据,并将它们输出到控制台、文件或其他输出流。

fmt 包主要组件和概念:

  1. 格式化函数:
    • fmt.Print 和 fmt.Println:用于将文本输出到标准输出(控制台)。Print 输出文本,Println 输出文本并添加换行符。
    • fmt.Printf 和 fmt.Sprintf:用于格式化文本并返回结果字符串。Printf 根据格式字符串进行格式化,Sprintf 返回格式化后的字符串。
    • fmt.Fprint 和 fmt.Fprintln:与 Print 和 Println 相似,但允许将输出定向到指定的输出流(例如文件)。
  2. 格式化字符串:格式化函数通常使用包含占位符的格式化字符串,其中占位符由百分号 % 开头,后跟一个字符,如 %s 表示字符串,%d 表示整数。占位符用于指定要格式化的数据的类型和位置。
  3. 错误处理:fmt 包中的许多函数返回一个 error 值,用于表示格式化或输出操作的错误。可以使用 errors 包或其他错误处理机制来处理这些错误。
  4. 输入函数:fmt 包还包含用于将输入解析为特定类型的函数,如 fmt.Scanf 和 fmt.Fscanf。
  5. 打印格式标识符:在格式化字符串中,你可以使用一些标识符来自定义输出格式,如 %d 表示十进制整数,%s 表示字符串,%f 表示浮点数等。

bufio 包

bufio 包是 Go 标准库中的一个包,用于提供带缓冲的输入和输出操作,以提高读写大量数据时的效率。它包含了许多用于缓冲读写的函数和类型,以及用于文件、网络连接等的包装类型。

bufio 包主要组件和概念:

  1. 缓冲读写:
    • bufio.Reader:代表一个带缓冲的读取器,允许从输入流中按行或字节块读取数据。它提供了 Read、ReadLine 等方法,以及许多其他方法来处理输入。
    • bufio.Writer:代表一个带缓冲的写入器,允许将数据写入输出流并控制何时执行实际的写入操作。它提供了 Write、WriteString 等方法,以及 Flush 方法来执行实际的写入操作。
  2. 包装类型:bufio 包还提供了一些包装类型,如 bufio.Scanner 和 bufio.ReaderAt,用于进一步处理数据和实现高级功能。
  3. 自定义缓冲:你可以使用 bufio.NewWriter 和 bufio.NewReader 函数创建自定义缓冲的写入器和读取器,以控制缓冲区大小和其他选项。
  4. 性能优化:通过使用带缓冲的读写,bufio 包可以显著提高输入输出的性能,减少频繁的系统调用。
请登录后再评论