Reader 接口
io 包定义的 io.Reader 接口, 表示数据流的读取端。
Go 标准库包中有许多实现该接口的实例,包括文件、网络连接、压缩器、加密器等。
io.Reader 接口要求一个 Read 方法:
go
func (T) Read(b []byte) (n int, err error)示例
go
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("Hello, Reader!")
b := make([]byte, 8)
// 创建一个长度为 8 的字节切片 b。
// 这个切片就像一个小桶,每次我们从 r 里读取数据时,就把数据装进这个桶里。
切片长度是 8,意味着每次最多能装 8 个字节(一个英文字母或标点一般占 1 个字节,所以相当于 8 个字符)。
for {
// 这是一个无限循环,循环内部调用 r.Read(b),尝试将数据读入切片 b。
n, err := r.Read(b)
// Read 方法返回两个值:
// n:实际读取到的字节数(可能小于切片长度,比如到了字符串末尾不够 8 字节了)。
// err:错误信息。如果读取成功,err 为 nil;如果读到数据末尾,err 会变成 io.EOF(EOF 是 End Of File 的缩写,表示数据源已经没数据了)。
// 打印每次读取的结果
fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
fmt.Printf("b[:n] = %q\n", b[:n])
if err == io.EOF {
break
}
}
}