您的位置:首页 > 编程语言 > Go语言

Go语言标准库-Reader接口

2018-01-16 15:32 513 查看
根据 Go 语言中关于接口和实现了接口的类型的定义(Interface_types),我们知道
Reader 接口的方法集(Method_sets)只包含一个
Read 方法,因此,所有实现了 Read 方法的类型都实现了 io.Reader 接口,也就是说,在所有需要 io.Reader 的地方,可以传递实现了 Read() 方法的类型的实例。

示例代码:

// io.Reader 接口示例
package main

import (
    "fmt"
    "io"
    "os"
    "strings"
)

func main(){
    ReaderExample()
}

func ReaderExample() {
FOREND:
    for {
        readerMenu()

        var ch
string
        //利用scan阻塞线程,并扫描标准输入流,如果有输入则存入 ch中
        fmt.Scanln(&ch)
    
        var (
            data []byte
            err error
        )
        switch strings.ToLower(ch) {
        case
"1":
            fmt.Println("请输入不多于9个字符,以回车结束:")
            data, err =
ReadFrom(os.Stdin, 11)
        case
"2":
            file, err := os.Open("../test.txt")
            if err
!= nil {
                fmt.Println("打开文件 01.txt 错误:", err)
                continue
            }
            data, err =
ReadFrom(file, 9)
            file.Close()
        case
"3":
            data, err =
ReadFrom(strings.NewReader("from string"),
12)
        case
"4":
            fmt.Println("暂未实现!")
        case
"b":
            fmt.Println("返回上级菜单!")
            break FOREND
        case
"q":
            fmt.Println("程序退出!")
            os.Exit(0)
        default:
            fmt.Println("输入错误!")
            continue
        }

        if err
!= nil {
            fmt.Println("数据读取失败,可以试试从其他输入源读取!")
        } else {
            fmt.Printf("读取到的数据是:%s\n", data)
        }
    }
}

func ReadFrom(reader io.Reader, num
int) ([]byte,
error) {
    p := make([]byte, num)
    n, err := reader.Read(p)
    if n >
0 {
        return p[:n],
nil
    }
    return p, err
}

func readerMenu() {
    fmt.Println("")
    fmt.Println("*******从不同来源读取数据*********")
    fmt.Println("*******请选择数据源,请输入:*********")
    fmt.Println("1 表示 标准输入")
    fmt.Println("2 表示 普通文件")
    fmt.Println("3 表示 从字符串")
    fmt.Println("4 表示 从网络")
    fmt.Println("b 返回上级菜单")
    fmt.Println("q 退出")
    fmt.Println("***********************************")
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  io Reader