推荐答案
在 Go 语言中,io 包提供了基本的 I/O 操作接口和工具函数。它定义了许多常用的接口,如 Reader、Writer、Closer 等,这些接口被广泛用于文件操作、网络通信等场景。以下是一些常见的用法:
读取数据:使用
io.Reader接口从数据源读取数据。data := make([]byte, 100) n, err := r.Read(data) if err != nil { log.Fatal(err) } fmt.Printf("Read %d bytes: %s\n", n, data[:n])写入数据:使用
io.Writer接口向目标写入数据。data := []byte("Hello, World!") n, err := w.Write(data) if err != nil { log.Fatal(err) } fmt.Printf("Wrote %d bytes\n", n)关闭资源:使用
io.Closer接口关闭资源,如文件或网络连接。err := c.Close() if err != nil { log.Fatal(err) }复制数据:使用
io.Copy函数从一个Reader复制数据到Writer。n, err := io.Copy(w, r) if err != nil { log.Fatal(err) } fmt.Printf("Copied %d bytes\n", n)读取全部数据:使用
io.ReadAll函数从Reader读取所有数据。data, err := io.ReadAll(r) if err != nil { log.Fatal(err) } fmt.Printf("Read all data: %s\n", data)
本题详细解读
io.Reader 接口
io.Reader 接口定义了读取数据的基本方法:
type Reader interface {
Read(p []byte) (n int, err error)
}Read方法从数据源读取数据到p中,并返回读取的字节数n和可能的错误err。- 当读取到数据末尾时,
err会返回io.EOF。
io.Writer 接口
io.Writer 接口定义了写入数据的基本方法:
type Writer interface {
Write(p []byte) (n int, err error)
}Write方法将p中的数据写入目标,并返回写入的字节数n和可能的错误err。
io.Closer 接口
io.Closer 接口定义了关闭资源的基本方法:
type Closer interface {
Close() error
}Close方法用于关闭资源,如文件或网络连接,并返回可能的错误。
io.Copy 函数
io.Copy 函数用于从一个 Reader 复制数据到 Writer:
func Copy(dst Writer, src Reader) (written int64, err error)
- 该函数会持续从
src读取数据并写入dst,直到src返回io.EOF或其他错误。 - 返回复制的字节数和可能的错误。
io.ReadAll 函数
io.ReadAll 函数用于从 Reader 读取所有数据:
func ReadAll(r Reader) ([]byte, error)
- 该函数会读取
r中的所有数据,直到r返回io.EOF或其他错误。 - 返回读取的数据和可能的错误。
通过掌握这些接口和函数,你可以在 Go 语言中高效地进行 I/O 操作。