Go io包:Reader与Writer接口
掌握io.Reader和io.Writer接口的设计哲学,实现数据流的读写与组合。 · 难度:入门 · +15XP
io包核心接口
Go的io包定义了数据流操作的基本接口,最核心的是:
| 接口 | 方法 | 说明 |
|---|---|---|
| io.Reader | Read(p []byte) (n int, err error) | 读取数据到切片 |
| io.Writer | Write(p []byte) (n int, err error) | 从切片写入数据 |
| io.Closer | Close() error | 关闭资源 |
Reader 示例
从字符串读取:
r := strings.NewReader("Hello, Go!")
buf := make([]byte, 4)
for {
n, err := r.Read(buf)
if err == io.EOF {
break
}
fmt.Printf("%q
", buf[:n])
}组合接口
io包提供了组合接口如ReadWriter:
type ReadWriter interface {
Reader
Writer
}实用函数
io.Copy(dst Writer, src Reader)— 复制数据io.ReadAll(r Reader)— 读取全部数据io.LimitReader(r Reader, n int64)— 限制读取长度
练习提示
实现一个UpperCaseReader,它将读取的所有小写字母转换为大写。提示:包装一个内部Reader,在Read方法中转换数据。