1. package main
    2. import (
    3. "fmt"
    4. "io"
    5. "strings"
    6. )
    7. func main() {
    8. r := strings.NewReader("hello,reader!")
    9. b := make([]byte, 13)
    10. for {
    11. //io.Reader接口中的Reader方法
    12. // 用数据填充给定的字节切片并返回填充的字节数和错误值
    13. // 在遇到数据流的结尾时,它会返回一个io.EOF错误
    14. // 这里是把r读取到b中吗
    15. // 前面的n表示填充的字节数,后面的err表示错误值
    16. //在遇到数据流的结尾时err就等于EOF,否则等于nil
    17. n, err := r.Read(b)
    18. //这里n应该表示这次读取到的字节数
    19. //第一次读取了8个字节,这次读取了剩余的5个字节,err仍为EOF
    20. fmt.Printf("n= %v err = %v b=%c \n", n, err, b)
    21. // 切片输出读取位置到剩余位置的值
    22. fmt.Printf("b[:n] = %q\n", b[:n])
    23. if err == io.EOF {
    24. break
    25. }
    26. }
    27. }