49、Go语言基础 - IO编程 - 输入和输出
hi,我是温新
Go 语言将 I/O 操作封装在如下几个包中:
-
io:为I/O原语提供基本的接口,在 io 包中最重要的是两个接口:Reader和Writer接口; -
fmt:实现格式化 I/O; -
bufio:实现带缓冲的 I/O。
io:基本 I/O 接口
io 包是 Go 标准库中的一个核心包,它提供了用于进行输入和输出操作的接口和函数。这个包包含了多个接口和类型,用于处理文件、网络、内存和其他数据源的输入和输出。
IO 包主要组件和概念
-
接口:
-
io.Reader:代表一个可读取数据的接口。它定义了一个Read方法,用于从数据源读取数据到字节切片。 -
io.Writer:代表一个可写入数据的接口。它定义了一个Write方法,用于将数据写入目标。 -
io.Closer:代表一个可以关闭的接口,通常用于关闭文件或网络连接。它定义了一个Close方法。 -
io.Seeker:代表一个可以寻址的接口,通常用于定位和设置数据源的位置。它定义了一个Seek方法。
-
-
类型:
-
io.Reader和io.Writer接口的常见实现类型,如bytes.Buffer、os.File、net.Conn等。 -
io.Pipe:用于创建一个管道,允许一个协程写入数据并另一个协程从中读取数据。
-
-
函数:
-
io.Copy:用于将数据从一个io.Reader复制到一个io.Writer。 -
io.ReadFull:用于从io.Reader中读取固定数量的字节。 -
io.ReadAll:用于从io.Reader中读取所有可用的数据,通常用于内存缓冲区。 -
io.WriteString:用于向io.Writer写入字符串。
-
-
错误处理:
-
io.EOF:代表文件或数据流结束的错误。 -
io.ErrUnexpectedEOF:代表意外的文件结束错误。
-
fmt 格式化 I/O
fmt 包是 Go 标准库中的一个核心包,用于格式化输入和输出。它提供了一系列函数和方法,用于格式化文本、数字、日期等数据,并将它们输出到控制台、文件或其他输出流。
fmt 包主要组件和概念:
-
格式化函数:
-
fmt.Print和fmt.Println:用于将文本输出到标准输出(控制台)。Print输出文本,Println输出文本并添加换行符。 -
fmt.Printf和fmt.Sprintf:用于格式化文本并返回结果字符串。Printf根据格式字符串进行格式化,Sprintf返回格式化后的字符串。 -
fmt.Fprint和fmt.Fprintln:与Print和Println相似,但允许将输出定向到指定的输出流(例如文件)。
-
-
格式化字符串:格式化函数通常使用包含占位符的格式化字符串,其中占位符由百分号
%开头,后跟一个字符,如%s表示字符串,%d表示整数。占位符用于指定要格式化的数据的类型和位置。 -
错误处理:
fmt包中的许多函数返回一个error值,用于表示格式化或输出操作的错误。可以使用errors包或其他错误处理机制来处理这些错误。 -
输入函数:
fmt包还包含用于将输入解析为特定类型的函数,如fmt.Scanf和fmt.Fscanf。 -
打印格式标识符:在格式化字符串中,你可以使用一些标识符来自定义输出格式,如
%d表示十进制整数,%s表示字符串,%f表示浮点数等。
bufio 包
bufio 包是 Go 标准库中的一个包,用于提供带缓冲的输入和输出操作,以提高读写大量数据时的效率。它包含了许多用于缓冲读写的函数和类型,以及用于文件、网络连接等的包装类型。
bufio 包主要组件和概念:
-
缓冲读写:
-
bufio.Reader:代表一个带缓冲的读取器,允许从输入流中按行或字节块读取数据。它提供了Read、ReadLine等方法,以及许多其他方法来处理输入。 -
bufio.Writer:代表一个带缓冲的写入器,允许将数据写入输出流并控制何时执行实际的写入操作。它提供了Write、WriteString等方法,以及Flush方法来执行实际的写入操作。
-
-
包装类型:
bufio包还提供了一些包装类型,如bufio.Scanner和bufio.ReaderAt,用于进一步处理数据和实现高级功能。 -
自定义缓冲:你可以使用
bufio.NewWriter和bufio.NewReader函数创建自定义缓冲的写入器和读取器,以控制缓冲区大小和其他选项。 -
性能优化:通过使用带缓冲的读写,
bufio包可以显著提高输入输出的性能,减少频繁的系统调用。
请登录后再评论