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

作者: 温新

分类: 【Go基础】

阅读: 338

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

hi,我是温新

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

  • io:为 I/O 原语提供基本的接口,在 io 包中最重要的是两个接口:ReaderWriter 接口;
  • 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.Readerio.Writer 接口的常见实现类型,如 bytes.Bufferos.Filenet.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.Printfmt.Println:用于将文本输出到标准输出(控制台)。Print 输出文本,Println 输出文本并添加换行符。
    • fmt.Printffmt.Sprintf:用于格式化文本并返回结果字符串。Printf 根据格式字符串进行格式化,Sprintf 返回格式化后的字符串。
    • fmt.Fprintfmt.Fprintln:与 PrintPrintln 相似,但允许将输出定向到指定的输出流(例如文件)。
  2. 格式化字符串:格式化函数通常使用包含占位符的格式化字符串,其中占位符由百分号 % 开头,后跟一个字符,如 %s 表示字符串,%d 表示整数。占位符用于指定要格式化的数据的类型和位置。
  3. 错误处理fmt 包中的许多函数返回一个 error 值,用于表示格式化或输出操作的错误。可以使用 errors 包或其他错误处理机制来处理这些错误。
  4. 输入函数fmt 包还包含用于将输入解析为特定类型的函数,如 fmt.Scanffmt.Fscanf
  5. 打印格式标识符:在格式化字符串中,你可以使用一些标识符来自定义输出格式,如 %d 表示十进制整数,%s 表示字符串,%f 表示浮点数等。

bufio 包

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

bufio 包主要组件和概念:

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