推荐答案
在 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 操作。